策略模式:策略模式针对一组算法(行为),将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。
我的理解:
策略模式就是利用多态动态实现一个接口和它的继承类。这些继承类就是指的不同策略。
 
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();
       }
}
在这个测试类中使用了多态去动态改变购买行为(在这里购买行为就是策略,这里有买书和买吃的两种策略)。