java实现策略模式
2015-07-05 09:40
561 查看
适用场景:一个业务有多个实现场景,3个以上的算法。
好处:解耦和,代码层次清晰,符合面向对象的特点
缺点:客户端代码类需要知道所有的策略,才能知道调用哪个
类集成关系:各个策略实现一个接口(IParseStrategy),在一个环境类(ContextClass)里包含策略接口的引用,环境类通过包含构造函数或者set方法把需要的策略赋给
接口引用,再包含一个对客户端暴漏的方法,这个方法里通过策略接口方法实现。
例子代码如下:
LMStrategy低级会员 MM中级会员 HM高级会员
package strategy;
public interface IStrategy {
public long calPrice(long num);
}
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));
}
}
好处:解耦和,代码层次清晰,符合面向对象的特点
缺点:客户端代码类需要知道所有的策略,才能知道调用哪个
类集成关系:各个策略实现一个接口(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));
}
}
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 设计模式之创建型模式
- 浅谈设计模式的学习
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 浅谈c#设计模式之单一原则
- 详解JavaScript的策略模式编程
- C#设计模式之观察者模式实例讲解
- C#设计模式之单例模式实例讲解
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- 面向对象设计模式的核心法则
- JavaScript设计模式之单件模式介绍
- 深入理解JavaScript系列(25):设计模式之单例模式详解
- JavaScript设计模式之外观模式实例
- 常见的PHP五种设计模式小结
- 小议javascript 设计模式 推荐