18.策略模式
2015-09-04 15:09
316 查看
场景:
-某个市场人员接到单后的报价策略,(crm系统中常见问题).
报价策略很复杂,可以简单作如下分类:
普通用户小批量报价
普通客户大批量报价
老客户小批量报价
老客户大批量报价
-具体选用哪个报价策略,这需要根据实际情况来确定。这时候,我们采用
策略模式即可。
传统可以采用条件语句处理。
假如类型特别多,算法比较复杂,整个条件控制代码会变得很长,难以维护。
策略模式:
对应于解决某一个问题的一个算法族,允许用户从该算法族中认选一个算法族解决
某一个问题,同时可以方便的更换算法或者增加新的算法。并由客户端决定调用哪个
算法。
开发中常见的场景:
-分离算法,选择实现。
![](https://img-blog.csdn.net/20150904150532574?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
开发中常见的场景:
-javase中gui编程中,布局管理
-spring框架中,resource接口,资源访问策略
-javax.servlet.http.HttpServlet#service()
/**
* 老客户大批量量购买
* @author Administrator
*
*/
public class OldCustomerManyStrategy implements Strategy {
@Override
public double getPrice(double standardPrice) {
System.out.println("老客户大批量打8.5折!");
return standardPrice * 8.5;
}
}
-某个市场人员接到单后的报价策略,(crm系统中常见问题).
报价策略很复杂,可以简单作如下分类:
普通用户小批量报价
普通客户大批量报价
老客户小批量报价
老客户大批量报价
-具体选用哪个报价策略,这需要根据实际情况来确定。这时候,我们采用
策略模式即可。
传统可以采用条件语句处理。
假如类型特别多,算法比较复杂,整个条件控制代码会变得很长,难以维护。
策略模式:
对应于解决某一个问题的一个算法族,允许用户从该算法族中认选一个算法族解决
某一个问题,同时可以方便的更换算法或者增加新的算法。并由客户端决定调用哪个
算法。
开发中常见的场景:
-分离算法,选择实现。
开发中常见的场景:
-javase中gui编程中,布局管理
-spring框架中,resource接口,资源访问策略
-javax.servlet.http.HttpServlet#service()
public interface Strategy { public double getPrice(double standardPrice); }
/** * 普通客户小批量购买 * @author Administrator * */ public class NewCustomerFewStrategy implements Strategy { @Override public double getPrice(double standardPrice) { System.out.println("普通客户不打折!"); return standardPrice; } }
/** * 普通客户大量购买 * @author Administrator * */ public class NewCustomerManyStrategy implements Strategy { @Override public double getPrice(double standardPrice) { System.out.println("普通客户大批量打9折!"); return standardPrice * 0.9; } }
/** * 老客户小批量购买 * @author Administrator * */ public class OldCustomerFewStrategy implements Strategy { @Override public double getPrice(double standardPrice) { System.out.println("老客户小批量打9折!"); return standardPrice * 0.9; } } <pre name="code" class="java">
/**
* 老客户大批量量购买
* @author Administrator
*
*/
public class OldCustomerManyStrategy implements Strategy {
@Override
public double getPrice(double standardPrice) {
System.out.println("老客户大批量打8.5折!");
return standardPrice * 8.5;
}
}
/** * 负责和具体的策略类交互 * 算法彻底和客户端分离了,使得算法可以独立于客户端,独立的变化 * @author Administrator * */ public class Context { private Strategy strategy; //当前采用的算法 //可以通过构造器来注入 public Context(Strategy strategy) { super(); this.strategy = strategy; } //可以通过set方法注入 public void setStrategy(Strategy strategy) { this.strategy = strategy; } //还可以通过配置文件注入 public void printPrice(double standardPrice) { System.out.println("报价:" + strategy.getPrice(standardPrice)); } }
public class Client { public static void main(String[] args) { Strategy s = new OldCustomerManyStrategy(); Context c = new Context(s); c.printPrice(1000.0); } }
相关文章推荐
- PHP循环遍历倒金字塔
- Algorithms - Week 1-1 Analysis of Algorithms
- HDU 5240 Exam (好水的题)
- 数据结构必须掌握 栈---压栈和出栈
- 百分比布局支持库 RelativeLayout和FrameLayout的尺寸用%来表示
- Ajax、json
- 自定义按钮~自适应布局~常见bug
- 使用Spark SQL 探索“全国失信人数据”
- iOS 文本与图片表情混排的实现
- SharePoint 2013 IT Professional —— Permissions
- Java Web 国际化
- HDU——2104 hide handkerchief
- 详解Oracle DELETE和TRUNCATE 的区别(摘)
- 关于Java中基于名字重用的几种形式的区别(覆写、隐藏、重载、遮蔽、遮掩)
- 多对多的关系操作
- 第三方后台管理
- RVO和NRVO
- 实施 ORM 的两项要旨:泛型和反射
- CXF数据绑定
- seajs简记