Design Pattern --- (1)Stragety pattern 策略模式

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

 

设计原则:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

 

设计原则: 针对接口编程,而不是针对实现编程

此设计原则涉及到面向对象编程中一个极其重要的特点:多态。具体说,就是父类指针指向子类对象。一个对象Has a Interface,并针对此接口编程。

而在实例化时,可以让此接口指向任一实现了此接口的子类对象。

 

 

父类Duck,持有飞行行为FlyBehavior及呱呱叫行为QuackBehavior的两个指针

 1 package Duck20160802;
 2 
 3 //Duck类为所有鸭子对象的父类
 4 
 5 public abstract class Duck {
 6     FlyBehavior flyBehavior;
 7     QuackBehavior quackBehavior;
 8     
 9     public Duck(){
10         
11     }
12     
13     public void performFly(){
14         flyBehavior.fly();
15     }
16     
17     public void performQuack(){
18         quackBehavior.quack();
19     }
20     
21     public void swim(){
22         System.out.println("All ducks float,even decoys!");
23     }
24 
25 }

 

MallardDuck继承了Duck,并将FlyBehavior及QuackBehavior指定为具体的飞行和呱呱叫行为

 1 package Duck20160802;
 2 
 3 //红头鸭MallardDuck继承父类Duck,并将quackbehavior制定为Quack方法
 4 //flyBehavior指定为FlyWithWings方法
 5 
 6 public class MallardDuck extends Duck {
 7     public MallardDuck(){
 8         quackBehavior = new Quack();
 9         flyBehavior = new FlyWithWings();
10     }
11     
12     public void display(){
13         System.out.println("I'm a real Mallard duck!");
14     }
15 
16 }

 

所有的文件

 

可以继续扩展FlyBehavior和QuackBehavior,但不用修改Duck类

 

 

设计原则:多用组合,少用继承

 

posted @ 2016-08-02 15:19  Liu_Jian_517  阅读(144)  评论(0编辑  收藏  举报