【发布时间】:2013-07-15 02:47:32
【问题描述】:
我想称它为“帮手”,但这似乎太笼统了。
假设我有一个名为 WidgetCranker 和 WidgetCranker 的类可以设置为生成 Square、Keyhole 和 GearShape 类型的小部件。我还可以指定我希望我的小部件是哪个Color,以及我希望在它们上标记哪个Label。
现在,设置WidgetCranker 的每个实例是相当复杂的,构造函数只给你一个空的WidgetCranker,你必须手动设置你想要启动的小部件的类型和颜色。
WidgetCranker keyholeWidget = new WidgetCranker();
keyholeWidget.Type = WidgetTypes.Keyhole;
keyholeWidget.Color = WidgetColors.Red;
keyholeWidget.Label = "ACME Industries Prototype 1";
但是我有一个类需要很多WidgetCrankers,除了标签之外几乎所有的东西看起来都一样。我想让我的代码更具可读性并且维护起来更省力,所以我创建了一个帮助类来为我完成所有工作。所以上面现在变成了:
WidgetCranker keyholeWidget = WidgetCrankerHelper.RedKeyhole("ACME Industries Prototype 1");
我的问题有两个:
这是一种实际的设计模式吗?如果是,我们怎么称呼它?我想称它为工厂,但它绝对不是工厂模式。在每种情况下,我们都在创建完全相同类型的对象,只是以不同的方式实例化它们。我知道这是一种“帮手”,但如果可以的话,我想更具体一些。它是一个做非常具体的事情的助手。
鉴于“Helper”是一个非常通用的名称,我觉得仅仅通过它产生的方法来命名是不够的。我应该给它命名,这样它的作用就很明显了。那么
MakeRedKeyhole或BuildRedKeyhole会更好吗?我不想使用GetRedKeyhole,因为这意味着我们正在取回对现有实例的引用,而不是创建一个全新的实例。
【问题讨论】:
-
它仍然是一个工厂......只是不是一个抽象工厂。
-
绝对是工厂:)
-
你去。多谢你们。我在考虑抽象工厂,结果陷入了困境。
-
工厂可以返回不同类型的具体对象。然而,返回配置不同而不是不同类型的简单对象仍然有效。
-
还应考虑 [Builder][1] 模式。 [1]:stackoverflow.com/questions/757743/…
标签: c# oop design-patterns helper