《设计模式解析》摘录(6)

来源:互联网 发布:如何申请域名邮箱 编辑:程序博客网 时间:2024/06/11 21:53

Strategy 模式

    定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。Strategy 模式使算法可独立于使用它的客户而变化。

    基础原则:

    1、对象都具有职责;

    2、这些职责不同的具体实现是通过多态的使用完成的;

    3、概念上相同的算法具有多个不同的实现,需要进行管理。

    将问题域中的各个行为互相分离开来——也就是说将它们解耦,是一个好的设计实践。这使我们可以修改负责某一行为的类,不会对其他类产生不良影响。

关键特征:

    意图:可以根据所处上下文,使用不同的业务规则或算法。

    问题:对所需算法的选择取抉于发出请求的客户或者要处理的数据。如果只有一些不会变化的算法,就不需要 Strategy 模式。

    解决方案:将对算法的选择和算法的实现相分离,允许根据上下文进行选择。

    参与者于协作者:

    1、Strategy 指定了如何用不同的算法;

    2、各 ConcreteStrategy 实现了这些不同的算法;

    3、Context 通过类型为 Strategy 的引用使用具体的 ConcreteStrategy。 Strategy 与 Context 相互作用以实现所选的算法(有时候 Strategy 必须查询 Context)。Context 将来自 Client 的请求转发给 Strategy。

    实现:让使用算法的类(Context)包含一个抽象类(Strategy),该抽象类有一个抽象方法指定如何调用算法。每个派生类按需要实现算法。

    注意:在原型 Strategy 模式中,选择所用具体实现的职责由 Client 对象承担,并转给 Strategy 模式的 Context对象。

原创粉丝点击