设计模式 之 策略模式
原
荐
字数 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设计模式之模板方法模式和建造者模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
微商团队管理实战手册
杜一凡 / 人民邮电出版社 / 2015-11 / 45.00元
回顾淘宝,用了10年时间才发展了不到1000万的卖家,再看微商,其仅一年时间就拥有了超过1000万的卖家。进入2015年,微商的发展之路虽有小坎坷,但前景依然被看好。然而任何一个想要做大、做强的微商都要以团队形式来发展,独立的个体只会举步维艰。 本书全面解读微商团队管理的营销书。全书共分为六章,分别从微商团队的商业秘密、微商团队的战略布局、管理基本功、建立高效团队、精通管理工具、未来发展等方......一起来看看 《微商团队管理实战手册》 这本书的介绍吧!