天天看点

《Head.First设计模式读书笔记》之策略模式

策略模式:策略模式针对一组算法(行为),将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。

我的理解:

策略模式就是利用多态动态实现一个接口和它的继承类。这些继承类就是指的不同策略。

追MM的例子:跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,单目的都是为了得到MM的芳心,我的追MM锦囊中有好多Strategy哦。

在这里追MM锦囊就相当于一个接口,此接口里定义了一个方法:appointment(),以下还有不同的女孩类(爱看电影的,喜欢小吃的,喜欢浪漫的等)继承这个锦囊接口。在实现时只有使用多态就可以实现动态改变行为。

再写个例子来进行巩固:

顾客去商店买商品,在顾客类中,付款是不变的行为,因此放在顾客类里。而对于购物行为,不同的顾客有不同的需求,因此把购物行为提取为一个封装类。以下为uml类图:

具体的实现请参照附件,以下列出测试类:

public class Test extends TestCase {

       public void testCase1(){

              Student student = new Student();

              //这里可以动态设置购买行为

              student.setShoppingBehavior(new ShoppingBooks());

              student.display();

              student.getShoppingBehavior().shopping();

              student.payment();

              System.out.println();

              SchoolGirl schoolGirl = new SchoolGirl();

              schoolGirl.setShoppingBehavior(new ShoppingEat());

              //如果女生也是去买书,我们可以在这里动态改变她的购买行为

              //schoolGirl.setShoppingBehavior(new ShoppingBooks());

              schoolGirl.display();

              schoolGirl.getShoppingBehavior().shopping();

              schoolGirl.payment();

       }

}

在这个测试类中使用了多态去动态改变购买行为(在这里购买行为就是策略,这里有买书和买吃的两种策略)。

<a href="http://down.51cto.com/data/2353759" target="_blank">附件:http://down.51cto.com/data/2353759</a>

本文转自 yzzh9 51CTO博客,原文链接:http://blog.51cto.com/java999/194116,如需转载请自行联系原作者

继续阅读