策略模式
来源:互联网 发布:无人机遥控软件 编辑:程序博客网 时间:2024/06/02 05:11
本质:分离算法,选择实现
场景javase中GUI编程中,布局管理器;spring框架中,resoyrce接口,资源访问策略;javax.servlet.http.httpservlet#service()
例子:比如商城打折,老用户新商品打9折,老用户老商品打8折,新用户新商品减10元,新用户老商品减20元
Strategy.java(策略类)
public interface Strategy {public double getPrice(double standardPrice);}
OldCustomerManyStrategy.java
public class OldCustomerManyStrategy implements Strategy {@Overridepublic double getPrice(double standardPrice) {System.out.println("打八折");return standardPrice*0.8;}}
OldCustomerFewStrategy.java
public class OldCustomerFewStrategy implements Strategy {@Overridepublic double getPrice(double standardPrice) {System.out.println("打八五折");return standardPrice*0.85;}}
NewCustomerManyStrategy.java
public class NewCustomerManyStrategy implements Strategy {@Overridepublic double getPrice(double standardPrice) {System.out.println("打九折");return standardPrice*0.9;}}
NewCustomerFewStrategy.java
public class NewCustomerFewStrategy implements Strategy {@Overridepublic double getPrice(double standardPrice) {System.out.println("不打折,原价");return standardPrice;}}
Context.java
/** * 负责和具体的策略类交互 * 这样的话,具体的算法和直接的客户端调用分离了,使得算法可以独立于客户端独立的变化。 * 如果使用spring的依赖注入功能,还可以通过配置文件,动态的注入不同策略对象,动态的切换不同的算法. * @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 pringPrice(double s){System.out.println("您该报价:"+strategy.getPrice(s));}}
测试
public class Client {public static void main(String[] args) {Strategy s1 = new OldCustomerManyStrategy();Context ctx = new Context(s1);ctx.pringPrice(998);}}
注意:如果使用ifelse,实现起来比较容易,符合一般开发人员的思路,假如,类型特别多,算法比较复杂时,整个条件语句的代码就变得很长,难于维护。如果有新增类型,就需要频繁的修改此处的代码!不符合开闭原则!
阅读全文
0 0
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 策略模式
- 读取Ini
- js 小球运动
- Qt5--按钮风格生成器
- 手机端简单js拖拽效果
- 关于在eclipse或myeclipse安装Find bugs插件的操作
- 策略模式
- source insight回车换行{}对齐
- MyEclipse2014安装freemarker插件
- 模拟android toast
- Python快速入门2--数据结构
- 数据库读写分离的简单思路
- 安装Android模拟器
- VB关于Winsock的State属性的值
- arm-linux-系列工具介绍