【发布时间】:2012-02-15 23:24:37
【问题描述】:
strategy pattern 定义了一系列算法,封装了每个 一,并使它们可以互换。策略让算法变化 独立于使用它的客户。
确实很好。但是考虑一下这种情况:我有一个策略模式,其中包含一些上下文子类和一些算法,如下所示。代码最后应该关闭进行修改,但我仍然需要能够实现以下扩展性。无需更改现有代码:
- 向
Context添加使用策略的新方法 - 添加
Context的新子类型
我想到了Visitor,这对实现 1) 很有好处。但是添加新的Context 子类型需要更改所有Visitors,所以这不起作用。
Decorator 呢?通过装饰Context,您可以添加新方法。但我真正需要的是添加具有具体实现的方法,这些实现可以像策略模式一样变化。
您觉得如何,如何实现?
最好的问候
丰富
编辑:
这是一个具体的例子。
我应该解释一下:我有一个应用程序,它带有一个显示不同类型的VisibleObjects 的模拟窗口和另一个用于控制这些对象的窗口。
VisibleObjects 的状态需要在模拟使用策略中体现出来。例如,如果我禁用 Polygon,它应该隐藏在模拟中,或者完全删除,具体取决于它的具体 DisablingBehavior。
如果定义了一种新的VisibleObject,比如定义了Picture,我希望所有现有的DisablingBehaviors 和PositioningBehaviors 都能够处理它。
如果有一个新操作,比如MirrorObject(),需要在VisibleObjects 上执行我希望能够定义不同的MirroringBehaviors 行为,例如AxisMirroring 或PointMirroring,并将它们分配给VisibleObjects.
【问题讨论】:
-
请举个具体的例子。
-
@jhauffin,我在帖子中添加了一个具体示例。您需要更多详细信息吗?
-
为什么您认为您当前的设计无法实现您的目标?在我看来,您可以放入
PictureObject,它是VisibleObject的子类,它应该能够毫无问题地传递给您的DisablingBehavior和PositioningBehavior子类。 -
是的,添加新子类很容易,但我不知道如何添加新方法。
标签: oop design-patterns architecture strategy-pattern