Java设计模式专题:策略模式

策略模式定义

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

设计图

Java设计模式专题:策略模式_第1张图片

  1. IFlyAble接口,两个实现类NoFly和RocketFly
  2. eagle类继承自Bird,因为飞的快,飞行的行为选择RocketFly;peacock类继承自Bird,因为不会飞,飞行的行为设置为NoFly
  3. 结论:IFlyAble封装飞行行为,NoFly和RocketFly是不同的飞行行为。可以在Bird继承类里选择不同的飞行行为

实例代码

public interface IFlyAble {
    void fly();
}


public class NoFly implements IFlyAble {

    @Override
    public void fly() {
        System.out.println("不会飞行");
    }
}



public class RocketFly implements IFlyAble {
    @Override
    public void fly() {
        System.out.println("像火箭飞行");
    }
}
  • 定义飞行行为接口,NoFly和RocketFly实现不同的飞行行为 
public abstract class Bird {

    protected IFlyAble iFlyAble;

    protected void setiFlyAble(IFlyAble iFlyAble) {
        this.iFlyAble = iFlyAble;
    }

    public abstract void showFlyInfo();
}


public class Eagle extends Bird {

    @Override
    public void showFlyInfo() {
        setiFlyAble(new RocketFly());
        System.out.print("老鹰");
        iFlyAble.fly();
    }
}

public class Peacock extends Bird {

    @Override
    public void showFlyInfo() {
        setiFlyAble(new NoFly());
        System.out.print("孔雀");
        iFlyAble.fly();
    }
}
  • 定义Bird,含有飞行行为接口且属于聚合模式
  • Eagle和Peacock继承Bird,根据不同的特性定义不同的飞行行为,策略模式切换算法的位置
  new Eagle().showFlyInfo();
  new Peacock().showFlyInfo();

//运行结果
老鹰像火箭飞行
孔雀不会飞行

总结:其实策略模式也有多种不同的形式,使用接口或者类作为定义行为,实现行为的类则是多个不同的行为。在使用行为的地方,可以在具体实现的位置选择不同的行为,即根据不同行为选择不同的策略。

你可能感兴趣的:(架构师)