策略模式

其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换,策略模式使得算法可以在不影响到客户端的情况下发生变化。

 

 

public abstract class DiscountStrategy{
   private int price=0;
   public abstract int calculateDiscount();
   public DiscountStrategy(int price){
      this.price=price;
   }
}

public class NoDiscountStrategy extends DiscountStrategy{
   private int price=0;
   public int calculateDiscount(){
      return 0;
   }
   public NoDiscountStrategy(int price){
      this.price=price;
   }
}

public class FlatRateStrategy extends DiscountStrategy{
   private int price=0;
   private int count;
   public FlatRateStrategy(int price){
      this.price=price;
   }
   public int calculateDiscount(){
      return price*count;
   }
}

 

 

在下面的情况下应当考虑使用策略模式:

1.如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。

2.一个系统需要动态地在几种算法中选择一种,那么这些算法可以包装到一个个的具体算法类里面,而这些具体算法类都是一个抽象算法类的子类。

3.一个系统的算法使用的数据不可以让客户端知道。

4.如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

你可能感兴趣的:(策略模式)