黑马程序员:Java培训、Android培训、iOS培训、.Net培训

               黑马程序员--策略模式

一、定义

        定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

二、策略模式类图

       

    1)Context与Strategy可相互作用以便实现选定的算法。Context可将该算法所需要的所有数据都传递给Strategy,甚至Context可将自身作为一个参数传递给Strategy,这就让Strategy在需要的时候可以回掉Context。

    2)Context将它的客户请求转发给它的Strategy。客户通常创建并传递一个ConcreteStrategy对象给该Context;这样,客户仅仅与Context交互。

三、适用性

    1、许多相关的类仅仅是行为有异。一种“策略”提供一种行为的不同实现。

    2、需要使用一个算法的不同变体。

    3、算法使用客户不应该知道的数据。可使用该模式以避免暴露复杂的、与算法相关的数据结构。

    4、一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。

四、使用策略模式需要考虑的问题

    1、Context与Strategy接口必须使得ConcreteStrategy能够有效的访问它所需要的Context中的任何数据,反之亦然。实现的方法有两种:

       1)让Context将数据放在参数中传递给Strategy操作。这使得Context与Strategy解耦,但,Context可能发送一些Strategy不需要的数据。

       2)让Context将自身作为一个参数传递给Strategy。这样,该Strategy再显式地想该Context请求数据。这使得Context与Strategy更紧密地耦合在一起。

    2、使Strategy对象成为可选地。Context在访问某Strategy前先检查它是否存在,如果有,就使用它;否则,Context执行缺省的行为。这种方法的好处是客户根本不需要处理Strategy对象,除非它们不喜欢缺省的行为。

 

写在模式之前:http://www.cnblogs.com/oo-lab/articles/4593399.html

策略模式:http://www.cnblogs.com/oo-lab/articles/4593407.html
迭代器模式:http://www.cnblogs.com/oo-lab/articles/4593416.html
观察者模式:http://www.cnblogs.com/oo-lab/articles/4593418.html
命令模式:http://www.cnblogs.com/oo-lab/articles/4593425.html
模板方法模式:http://www.cnblogs.com/oo-lab/articles/4593428.html
状态模式:http://www.cnblogs.com/oo-lab/articles/4593429.html

单件模式:http://www.cnblogs.com/oo-lab/articles/4593432.html
工厂方法模式:http://www.cnblogs.com/oo-lab/articles/4593435.html
抽象工厂模式:http://www.cnblogs.com/oo-lab/articles/4593440.html
生成器模式:http://www.cnblogs.com/oo-lab/articles/4593444.html