设计模式 之 策略模式
原
荐
字数 713
阅读 7
收藏 0
开发十年,就只剩下这套 Java 开发体系了 >>>
设计模式 之 策略模式
定义
提供几个算法策略,选择其中一个策略去执行。
优点
- 由于将算法封装成单独的策略,策略可以灵活切换。
- 扩展性好,符合开闭原则。
缺点
- 策略多,类也会变多
- 策略类需要对外暴露
代码
场景
常见的加、减、乘、除,客户端选择其中一个算法进行计算。
代码
IOperation
/** * 操作接口 * @author GaoYuan * @date 2018/11/11 下午2:45 */ public interface IOperation { /** 执行计算 */ int operation(int a,int b); }
加、减、乘、除具体的算法实现类
/** * 加法 */ public class AddOperation implements IOperation{ @Override public int operation(int a, int b) { return a + b; } } /** * 减法 */ public class SubOperation implements IOperation{ @Override public int operation(int a, int b) { return a - b; } } /** * 乘法 */ public class MulOperation implements IOperation{ @Override public int operation(int a, int b) { return a * b; } } /** * 除法 */ public class DivOperation implements IOperation{ @Override public int operation(int a, int b){ if(b == 0){ return 0; } return a / b; } }
Context
/** * 使用者 * @author GaoYuan * @date 2018/11/11 下午2:51 */ public class Context { IOperation iOperation; public Context(IOperation iOperation) { this.iOperation = iOperation; } public int execute(int a, int b){ return iOperation.operation(a, b); } }
测试
public static void main(String[] args){ // 加 Context context = new Context(new AddOperation()); System.out.println(context.execute(6,2)); // 减 context = new Context(new SubOperation()); System.out.println(context.execute(6,2)); // 乘 context = new Context(new MulOperation()); System.out.println(context.execute(6,2)); // 除 context = new Context(new DivOperation()); System.out.println(context.execute(6,2)); }
结果输出:
策略模式 与 状态模式 区别
相同点
- 类的结构都差不多
不同点
- 状态模式 侧重 状态之间的切换,在状态A执行完毕后自己控制状态指向状态B,根据状态改变行为。
- 策略模式 侧重 调用者选择其中一种策略进行执行。根据不同的条件选择不同的策略。
策略模式 与 简单工厂模式 区别
相同点
- 最终结果是一致的,都是根据某个情景,执行最终的算法
不同点
概念上,或者说最本质的区别
- 简单工厂模式属于创建型模式,调用者,根据条件,可以获取直接创建好的目标对象,然后调用该对象对应的方法即可。
- 策略模式属于行为型模式,调用者需要先创建Context对象,然后自行选择算法,以便具体调用。
当然,在一定程度上,两者也可以相结合。
码云
博客
https://my.oschina.net/gmarshal/blog/2876104
欢迎关注我的个人微信订阅号:(据说这个头像程序猿专用)
© 著作权归作者所有
共有人打赏支持
上一篇: 浅谈前后端分离项目结构的探索
下一篇: 设计模式 之 状态模式
相关文章 最新文章
《PHP设计模式大全》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201739.html 文章 php 设计模式介绍之编程惯用法第1/3页 php设计模式介绍之值对象模式第1/5页...
kaixin_code
11/06
0
0
该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 今天讲讲策略模式,策略模式 和工厂模式十分相像(或者说在代码逻辑层面,他们是一样的)。 但策略模式与...
gzchen
08/27
0
0
工厂模式介绍 工厂模式是一个创建型的模式,主要就是创建对象。其中工厂模式又分为简单工厂模式和抽象工厂模式。简单工厂模式是通过工厂方法确定创建 对应类型的对象。抽象工厂模式是通过子类...
hlxiong
2014/04/14
0
0
JavaScript设计模式入坑 介绍 设计模式编写易于维护的代码。 设计模式的开创者是一位土木工程师。Σ( ° △ °|||)︴,写代码就是盖房子。 模式 模式一种可以复用的解决方案。解决软件设计中...
小小小8021
10/18
0
0
一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...
MrTrying
06/24
0
0
没有更多内容
加载失败,请刷新页面
加载更多1.点击虚拟机: 2.点击安装Vmware-Tools,出现如下界面,将圈起来的拖动到桌面 3.接着打开终端,执行解压缩命令 tar -xzv -f VMwareTools-10.2.5-8068393.tar.gz 这个后面的VMwareTools-10.2....
陈刚生
31分钟前
1
0
java SE : java standard edition , JSE。它允许允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的java应用程序。 java SE包含了java Web 服务开发的类,并为java platform ,e...
hellation_
34分钟前
3
0
像人类一样可以思考,可以创造的人工智能会出现吗? 个人认为:会出现。但是出现的时间,取决了于硬件架构,和运算架构实现的时候。原因在于,人类智能可以出现,机器智能为什么不可以呢,不...
janl
39分钟前
1
0
omi-mp 是什么 Omi 框架是微信支付线研发部和 AlloyTeam 开源的通用 Web 组件化框架,基于 Web Components,用来开发 PC、手机浏览器或者微信、手Q webview 的 Web 页面。自今年5月开源以来,...
腾讯开源
43分钟前
1
0
没有更多内容
加载失败,请刷新页面
加载更多以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 设计模式——订阅模式(观察者模式)
- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- java23种设计模式-门面模式(外观模式)
- 设计模式-享元设计模式
- Java 设计模式之工厂方法模式与抽象工厂模式
- JAVA设计模式之模板方法模式和建造者模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。