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

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

思想概要

软件无非就是数据和算法,或者叫状态和行为。当你发现某些类他们拥有同样的数据而仅仅是行为不同的话,你第一时间肯定就想把这些类的数据独立到一个类,而算法分离到不同的类中,然后根据具体情况再把数据和算法动态的结合起来,这就是策略模式要处理的基本问题模型。在JDK中我们常常使用的容器排序就是个典型策略模式,列表或者Map在排序时需要用户指定Comparator,这就是让用户自己指定排序算法。举个我自己经历的例子:在某个项目中有两种方式来处理图片,一种是opencv,一种是ImageIO,虽然这两个库的具体用法不同,但是你要处理的图片是一样的,而你想要在某些前提条件变化时选择他们中的任一种来处理这张图片。这就是典型的数据一致但是算法不一致的具体场景,你完全可以把保存图片路径,类型信息的类和使用类库处理图片的类分开,在条件判断里把它们合并起来。

上图就是策略模式的类图,拥有数据信息的是Context类,它包含了一个Staregy的接口引用,并在需要对数据处理的时候调用这个引用的API进行数据处理。而真实的算法类则是在条件判断中通过Context的构造函数设置到Context类中去的。

public static void main(String[] args) {    Context context = null;    if (isOpenCvActive()) {        context = new Context(new ConcreteStategyA());    } else {        context = new Context(new ConcreteStategyB());    }}

 

转载于:https://www.cnblogs.com/mubawa/p/9620803.html

你可能感兴趣的文章
Kafka的Consumer负载均衡算法
查看>>
换个姿势学数学:二次函数与拆弹部队
查看>>
React-事件机制杂记
查看>>
[LeetCode] Unique Word Abbreviation 独特的单词缩写
查看>>
[20171105]exp imp buffer参数解析.txt
查看>>
JEESZ分布式框架--单点登录集成方案
查看>>
连载31:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)...
查看>>
22-高级路由:OSPF 路由认证:明文、密文
查看>>
APP推广如何实现邀请追踪?
查看>>
元旦晚会年终总结汇报PPT模板
查看>>
Linux环境下运行Java项目的sh脚步
查看>>
Couldn't register xxx with the bootstrap server.
查看>>
作为管理者,如何理解数据与业务?
查看>>
precreatewindow里面做了什么
查看>>
大数据开发第一步:Hadoop基础学习
查看>>
eclipse的jvm配置
查看>>
python的常用模块
查看>>
我的友情链接
查看>>
Delphi下WebBrowser应用示例
查看>>
AS3的http
查看>>