【行为型模式】策略模式(Strategy)之23种java设计模式
来源:互联网 发布:第一初恋网络剧第一季 编辑:程序博客网 时间:2024/04/25 09:34
常规场景分析和实现:
TestStrategy
/** * 实现起来比较容易,符合一般开发人员的思路 * 假如,类型特别多,算法比较复杂时,整个条件语句的代码就变得很长,难于维护。 * 如果有新增类型,就需要频繁的修改此处的代码! * 不符合开闭原则! * @author Administrator * */public class TestStrategy {public double getPrice(String type, double price) {if (type.equals("普通客户小批量")) {System.out.println("不打折,原价");return price;} else if (type.equals("普通客户大批量")) {System.out.println("打九折");return price * 0.9;} else if (type.equals("老客户小批量")) {System.out.println("打八五折");return price * 0.85;} else if (type.equals("老客户大批量")) {System.out.println("打八折");return price * 0.8;}return price;}}
策略模式实现:
Strategy接口
public interface Strategy {public double getPrice(double standardPrice);}NewCustomerFewStrategy类
public class NewCustomerFewStrategy implements Strategy {@Overridepublic double getPrice(double standardPrice) {System.out.println("不打折,原价");return standardPrice;}}NewCustomerManyStrategy类
public class NewCustomerManyStrategy implements Strategy {@Overridepublic double getPrice(double standardPrice) {System.out.println("打九折");return standardPrice*0.9;}}OldCustomerFewStrategy类
public class OldCustomerFewStrategy implements Strategy {@Overridepublic double getPrice(double standardPrice) {System.out.println("打八五折");return standardPrice*0.85;}}OldCustomerManyStrategy类
public class OldCustomerManyStrategy implements Strategy {@Overridepublic double getPrice(double standardPrice) {System.out.println("打八折");return standardPrice*0.8;}}
Context类负责和具体的策略类交互
* 这样的话,具体的算法和直接的客户端调用分离了,使得算法可以独立于客户端独立的变化。
* 如果使用spring的依赖注入功能,还可以通过配置文件,动态的注入不同策略对象,动态的切换不同的算法.
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));}}
测试类Client
public class Client {public static void main(String[] args) {Strategy s1 = new OldCustomerManyStrategy();Context ctx = new Context(s1);ctx.pringPrice(998);}}
0 0
- 【行为型模式】策略模式(Strategy)之23种java设计模式
- 【设计模式】行为模式之Strategy策略
- 设计模式--行为型-Strategy(策略)
- 11种行为型模式之:策略模式(Strategy)
- [设计模式-行为型]策略模式(Strategy)
- 设计模式(行为型)之策略模式(Strategy Pattern)
- JAVA设计模式(13) —<行为型>策略模式(strategy)
- 设计模式(十三)策略模式(Strategy)-行为型
- 设计模式(4)-行为型-策略模式(Strategy)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 设计模式--策略模式Strategy(行为型)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 搭建React Native for Android Windows开发环境
- C++11系列-改进的类型推导:auto、decltype和新的函数语法
- 屌丝程序猿的中国合伙人之路
- Android MVP模式
- int 与 string 相互转换
- 【行为型模式】策略模式(Strategy)之23种java设计模式
- D27
- jquery——$.each的用法
- iOS 搜索功能的实现
- 美团在Redis上踩过的一些坑-5.redis cluster遇到的一些问题
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)(解决不可连的问题,解决方案在最后面)
- 【转帖】Facebook 的自动化测试
- C++11系列-lambda函数
- 安卓应用每次从后台切换到前台都会启动欢迎界面的问题