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