[一天一个设计模式]-[策略模式]

策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。

策略模式和状态模式的区别:

  • 策略模式的每个策略是平等的,所有策略调用者都应该知道,由调用者自己判断选择运用哪个策略
  • 状态模式的每个状态存在转换关系,调用者不用知道所有的状态,状态的转变一般不由调用者主动设置状态

策略模式的主要角色如下。

  • 抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
  • 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
  • 环境(Context)类:持有一个策略类的引用,最终给客户端调用。

举个栗子,打架的时候如果是防守策略那行为就是举盾,攻击策略就是挥剑


interface Strategy{
    void move();
}

class Attack implements Strategy{
    
    @Override
    void move(){
        sout("ATTACK!")
    }
    
}

class Defense implements Strategy{
    
    @Override
    void move(){
        sout("defense!")
    }
}

class Fighter{
    Strategy strategy;
    
    public void setStrategy(){
        this.Strategy = strategy;
    }
    
    public void move(){
        strategy.move();
    }
    
}
  

main(){
    
    Fighter f=new Fighter();
    Strategy a= new AttackStrategy();
    Strategy d= new DefenseStrategy();
    
    f.setStrategy(a);
    f.move();
    
    f.setStrategy(d);
    f.move();
}
posted @ 2019-12-12 08:56  A_yes  阅读(110)  评论(0编辑  收藏  举报