【发布时间】:2015-08-02 18:08:41
【问题描述】:
我们知道策略设计模式属于行为设计模式,行为设计模式根据它们代表某种对象关系这一事实进行分类。 任何人都可以在策略中解释如何维护对象关系以及在谁之间。我们创建一个包含不同实现的上下文,客户端将在运行时选择其中一个,并且在另一个场景中也可以更改。 但是这里如何维护对象关系,这两个对象是什么。
【问题讨论】:
标签: design-patterns
我们知道策略设计模式属于行为设计模式,行为设计模式根据它们代表某种对象关系这一事实进行分类。 任何人都可以在策略中解释如何维护对象关系以及在谁之间。我们创建一个包含不同实现的上下文,客户端将在运行时选择其中一个,并且在另一个场景中也可以更改。 但是这里如何维护对象关系,这两个对象是什么。
【问题讨论】:
标签: design-patterns
策略模式只是表示使用对象的算法。这里的关系是调用策略的对象和表示策略的对象之间的关系。
interface FooSorter {
List<Foo> sort(List<Foo> input);
}
class FooMergeSorter implements FooSorter { /* ... */ }
class FooHeapSorter implements FooSorter { /* ... */ }
/** The only thing you need to know about this class is that it needs Foo sorted. */
class YourContainerClass {
FooSorter sortStrategy = new FooHeapSorter();
void doSomething(List<Foo> listOfFoos) {
// Sort according to the strategy.
List<Foo> sortedList = sortStrategy.sort(listOfFoos);
// ...
}
}
从这个意义上说,容器类(上图,YourContainerClass)负责选择策略或允许分配策略。它们使用的所有其他属性——实例控制,或者它们是如何提供的(通过你的上下文),或者它们是如何分配到调用的类上的——都超出了模式的范围。
请参阅this answer 了解更多关于策略模式以及它如何融入其他设计模式的信息。
【讨论】: