美文网首页
Java设计模式之策略模式

Java设计模式之策略模式

作者: 独羽 | 来源:发表于2018-01-28 21:05 被阅读0次
    什么是策略模式

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

    策略模式的结构

            策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理.策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类.
            策略模式由三方参与: 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设计模式之策略模式

          本文链接:https://www.haomeiwen.com/subject/rsxaaxtx.html