设计模式之策略模式

来源:互联网 发布:两电一邮 知乎 编辑:程序博客网 时间:2024/06/08 12:15
策略模式精髓:1.Favor composition over inheritance复合(组合)优先于继承2.组合定义:在类中增加一个私有域,引用另一个已有的类的实例,通过调用引用实例的方法从而获得新的功能,这种设计被称作组合(复合)(意思就是:得到其他类的对象,使用这个对象的方法。)
/* * 鸭子父类,所有鸭子都需继承此父类 */public abstract class Duck {public abstract void display();public  void quack(){System.out.println("嘎嘎嘎");}private FlyingStragety flyingStragety;public FlyingStragety getFlyingStragety() {return flyingStragety;}public void setFlyingStragety(FlyingStragety flyingStragety) {this.flyingStragety = flyingStragety;}//父类新增方法接口由子类重写该接口具体实现public void fly(){flyingStragety.performFly();}}
/* * 策略接口,实现飞行 */public interface FlyingStragety {public void performFly();}
//重写接口方法的具体实现类public class FlyWithWin implements FlyingStragety{@Overridepublic void performFly() {// TODO Auto-generated method stubSystem.out.println("我用翅膀飞");}}

public class RedHeadDuck extends Duck{    public RedHeadDuck() {super();    super.setFlyingStragety(new FlyWithWin());//实现类实例,创建实例时即创建了fly}@Overridepublic void display() {// TODO Auto-generated method stubSystem.out.println("我是红头呀");}@Overridepublic void fly() {// TODO Auto-generated method stubsuper.fly();}}
public class DuckTest {public static void main(String[] args) {Duck duck = new RedHeadDuck();duck.display();duck.fly();duck.quack();}}

测试结果:
我是红头呀我用翅膀飞嘎嘎嘎