美文网首页
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. 策略模式会造成很多的策略类.

相关文章

  • 策略模式

    参考资料:漫话:如何给女朋友解释什么是策略模式? 设计模式之策略模式(实例+Demo) Java设计模式(8)——...

  • 学习Head First设计模式Day1

    Java设计模式之设计模式 策略模式:策略模式定义了算法簇,分别封装起来,让他们之间可以互相替换,此设计模式让算法...

  • 策略模式

    本文参考自: 《JAVA设计模式》之策略模式(Strategy) 1. 作用 策略模式属于对象的行为模式。其用意是...

  • Java设计模式——策略模式

    Java设计模式之策略模式 这期分享的模式是策略模式是程序设计中最常用的了,因为开发工作中总是会使用到策略模式。 ...

  • Java设计模式之策略模式

    Java设计模式之策略模式 简介 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行...

  • java建造者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java单例模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java外观模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java适配器模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java观察者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

网友评论

      本文标题:Java设计模式之策略模式

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