博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
策略模式-Strategy Pattern
阅读量:6717 次
发布时间:2019-06-25

本文共 1244 字,大约阅读时间需要 4 分钟。

解决问题

将算法按照策略或场景封装起来,以方便按照不同的场景执行不同的策略。它很好的解决了通过if...else 来决策行为而带来的代码和逻辑复杂性。

应用场景

一个经常被拿来举例的场景是收银员收银场景:它需要根据不同的场景(是否为会员、有无促销等)来决定计算方式,如果使用if..else将使得代码复杂的无法维护,这时我们就可以分场景来计算即可。

所以该策略的应用场景即为:需要根据场景执行不同的策略(该策略应该具有一定的复杂性)

模式图UML

  • Context:即场景,持有一个或多个策略

  • Strategy: 即策略,具有一个执行策略的方法

  • ConcreteStrategy:具体策略

示例

举一个实际工作中的例子吧。APP在改版时通常需要做ABTest,A/B策略展式的样式会有所不同。

  • Strategy
public interface Strategy {     public void show(); } 复制代码
  • Concrete
public class StrategyA implements Strategy {     @Override     public void show() {         System.out.println("展示促销");     } }public class StrategyB implements Strategy{     @Override     public void show() {         System.out.println("展示广告");     } }复制代码
  • Context
@AllArgsConstructor public class Context {     private Strategy strategy;     // 可能还有其它信息          public void showPattern() {         strategy.show();     } }复制代码
  • client
public class Client {     public static void main(String[] args) {         String a = "a";// getStrategy from rpc         Strategy strategy;         if (a.equals("a")) {             strategy = new StrategyA();         } else {             strategy = new StrategyB();         }          new Context(strategy).showPattern();     } }复制代码

参考

https://en.wikipedia.org/wiki/Strategy_pattern

转载地址:http://niumo.baihongyu.com/

你可能感兴趣的文章
《软件建模与设计: UML、用例、模式和软件体系结构》一一1.8 软件建模和设计方法的发展...
查看>>
web 应用通用数据访问层 Fetchr
查看>>
《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一1.2 建立基准...
查看>>
绕过 Windows 10 Cloud 限制 成功运行 Win32 应用程序
查看>>
Alamofire —— Swift 的 HTTP 客户端开发包
查看>>
《程序员的呐喊》一一1.13 弱类型机制够不够强
查看>>
Windows 10 Redstone 终将引入交互式动态瓷贴
查看>>
《机器人与数字人:基于MATLAB的建模与控制》——3.1节平移和旋转
查看>>
《途客圈创业记:不疯魔,不成活》一一1.3 iWeekend创业周末
查看>>
《精通SNMP》——2.4 标签类型和子类型
查看>>
《云数据中心构建实战:核心技术、运维管理、安全与高可用》——导读
查看>>
《Python自动化运维:技术与最佳实践》一2.4 探测Web服务质量方法
查看>>
《Android UI基础教程》——2.4节显示列表
查看>>
《Scala机器学习》一一1.5 使用Scala和Spark的Notebook工作
查看>>
Fast-FrameWork v0.1.1,JDK 8 MVC 框架
查看>>
《IP组播(第1卷)》一导读
查看>>
《高效能程序员的修炼》一学会读源代码
查看>>
3大军团、266个项目,菜鸟技术如何玩转双11项目管理?
查看>>
魅族隔空回应雷军:开放 Flyme 对抗 MIUI
查看>>
成为阿里云大使的笔记
查看>>