Java设计模式之策略模式

什么是策略模式

        策略模式属于对象的行为模式,其实就是将一组算法封装到具有共同接口的独立的类中,从而使得他们可以相互替换.策略模式使得算法可以在不影响客户端的情况下发生改变

策略模式的结构

        策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理.策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类.
        策略模式由三方参与: 1. 策略接口--定义所有支持的算法的公共接口 2. 具体策略--实现某具体的算法 3. 策略的应用环境---持有一个策略对象的引用.

使用场景
  • 策略接口
//车票策略接口
public  interface ITicketStrategy{ 
     //策略方法
     public double  calcPrice(double ticketPrice);
} 
  • 具体策略实现类
//商务票策略 
public class BusinessTicketStrategy implements ITicketStrategy {
      @Override                                              
      public double calcPrice(double ticketPrice) {     
              System.out.println("商务座票价:"+ticketPrice); 
              return ticketPrice;   
      }                  
}
 //一等坐票策略
 public class TopRateTicketStrategy implements ITicketStrategy {
     @Override 
     public double calcPrice(double ticketPrice) {  
            System.out.println("一等坐票价:"+ticketPrice*0.9);   
            return ticketPrice*0.9; 
     }     
}  
//二等坐票策略   
public class SecondRateTicketStrategy implements ITicketStrategy {    
    @Override
    public double calcPrice(double ticketPrice) {         
          System.out.println("二等座票价:"+ticketPrice*0.8);    
          return ticketPrice*0 .8;   
    }    
}
  • 策略应用环境
 // 价格类--不同的策略产生不同的价格 
public class Price {  
    //策略对象 
    private ITicketStrategy ticketStrategy;      
    //传入一个具体的策略对象     
    public Price(ITicketStrategy ticketStrategy){  
          this.ticketStrategy = ticketStrategy;    
    }  
    //计算车票价格  
    public double execute(double ticketPrice){    
          return this.ticketStrategy.calcPrice(ticketPrice);    
    }     
}
  • 客户端
public class Client { 
      public static void main(String[] args) {   
          //创建策略对象              
          ITicketStrategy ticketStrategy = new BusinessTicketStrategy(); 
          //创建应用环境 
          Price price = new Price(ticketStrategy);  
          //计算价格 
          double quote = price.execute(400);
          System.out.println(quote);  
    }    
}                
认识策略模式
  1. 策略模式仅仅封装算法,提供算法的变更 ,不决定何时使用何种算法,在什么情况下使用什么算法由客户端决定
  2. 各个策略算法之间是平等的,他们之间可以相互替换
  3. 使用策略模式可以动态地让一个对象在许多行为中选择一种行为
策略模式的优点
  1. 策略模式提供了管理相关的算法族的办法,可以将公共的代码移到父类里,从而避免重复的代码
  2. 使用策略模式可以避免使用多重条件转移语句.多重转移语句不易维护,他把采取哪一种算法的逻辑与算法的逻辑混合在一起.
策略模式的缺点
  1. 客户端必须知道所有的策略类,并自行决定使用那一个策略,策略模式只适用于客户端知道所有的算法的情况.
  2. 策略模式会造成很多的策略类.

你可能感兴趣的:(Java设计模式之策略模式)