适用场景:一个业务有多个实现场景,3个以上的算法。
好处:解耦和,代码层次清晰,符合面向对象的特点
缺点:客户端代码类需要知道所有的策略,才能知道调用哪个
类集成关系:各个策略实现一个接口(IParseStrategy),在一个环境类(ContextClass)里包含策略接口的引用,环境类通过包含构造函数或者set方法把需要的策略赋给
接口引用,再包含一个对客户端暴漏的方法,这个方法里通过策略接口方法实现。
例子代码如下:
LMStrategy低级会员 MM中级会员 HM高级会员
package strategy;
public interface IStrategy {
public long calPrice(long num);
}
public class LMStrategy implements IStrategy {
@Override
public long calPrice(long num) {
// TODO Auto-generated method stub
return num*1;
}
}
public class MMStrategy implements IStrategy {
@Override
public long calPrice(long num) {
// TODO Auto-generated method stub
return num*2;
}
}
public class HMStraty implements IStrategy {
@Override
public long calPrice(long num) {
// TODO Auto-generated method stub
return num*3;
}
}
策略环境类:
public class Price {
private IStrategy strategy;
public Price(IStrategy strategy){
this.strategy =strategy;
}
public long quote(long booksPrice){
return this.strategy.calPrice(booksPrice);
}
}
客户端类
public class Client {
public static void main(String[] args) {
IStrategy mm = new MMStrategy();
Price price = new Price(mm);
System.out.println(price.quote(1000));
}
}