java 23种常用设计模式之策略模式(Strategy)
来源:互联网 发布:贵州省大数据培训 编辑:程序博客网 时间:2024/04/18 10:24
才发现昨天桥接模式上传的代码没通过审核,有点搞不清楚是怎么回事,也懒得问了!代码基本都贴在文章里了,虽然看似有点黑了XX,真的只是个无聊的玩笑而已!
我还是别费脑想故事了,还是规规矩矩的陈述别人的例子吧!虽然没什么人看到这些吐槽式的例子,但是还是为自己的形象着想吧!我不是什么女生,但也不是什么屌丝,我只是喜欢写代码,偶尔吐吐槽而已……没关系的,我写给自己看的而已,大不了代码不传了,反正基本全部都贴出来了!任性!!!
策略模式,定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换,目的是让算法独立于使用它的客户而独立变化。
策略模式由三部分组成:
1.抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
2.具体策略角色:包装了相关的算法和行为。
3.环境角色:持有一个策略类的引用,最终给客户端调用。
概念神马的就提这么多吧!上类图:
解释一下:这是简易计算器使用策略模式的一个经典实现,test是客户端,Icalculator作为统一接口,提供算法,是抽象的策略类角色;AbstractCalculator是辅助类,充当具体策略角色,包装了相关算法和行为,提供辅助方法;Plus、Minus和Multiply是Icalculator的三个实现类,充当环境角色,最终给客户端调用。代码:package com.freedom.strategy;public interface ICalculator {public int calculator(String exp);}package com.freedom.strategy;public class AbstractCalculator { public int[] split(String exp, String opt) { String array[] = exp.split(opt); int arrayInt[] = new int[2]; arrayInt[0] = Integer.parseInt(array[0]); arrayInt[1] = Integer.parseInt(array[1]); return arrayInt; }}package com.freedom.strategy;public class Plus extends AbstractCalculator implements ICalculator { @Override public int calculator(String exp) { int arrayInt[] = split(exp, "\\+"); return arrayInt[0]+arrayInt[1]; }}package com.freedom.strategy;public class Minus extends AbstractCalculator implements ICalculator { @Override public int calculator(String exp) { int arrayInt[] = split(exp, "\\-"); return arrayInt[0]-arrayInt[1]; }}package com.freedom.strategy;public class Multiply extends AbstractCalculator implements ICalculator { @Override public int calculator(String exp) { int arrayInt[] = split(exp, "\\*"); return arrayInt[0]*arrayInt[1]; }}package com.freedom.strategy;import org.junit.Test;public class TestStrategy { @Test public void test() { String exp = "3+5"; ICalculator ic = new Plus(); int result = ic.calculator(exp); System.out.println(result); String exp2 = "3-5"; ICalculator ic2 = new Minus(); int result2 = ic2.calculator(exp2); System.out.println(result2); String exp3 = "3*5"; ICalculator ic3 = new Multiply(); int result3 = ic3.calculator(exp3); System.out.println(result3); }}
小结:
优点:
由以上可以看出,策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。
缺点:
1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。
2. 策略模式造成很多的策略类,每个具体策略类都会产生一个新类。有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略类设计成可共享的,这样策略类实例可以被不同客户端使用。换言之,需要使用享元模式来减少对象的数量才会更佳。
0 0
- java 23种常用设计模式之策略模式(Strategy)
- 简述23种java设计模式之策略模式(strategy)
- 23种设计模式之策略模式(Strategy)
- 23种设计模式之-----策略模式(Strategy Pattern)
- 【行为型模式】策略模式(Strategy)之23种java设计模式
- java设计模式之策略模式 Strategy
- Java设计模式之--策略模式(strategy)
- java设计模式之 strategy策略模式
- java 常用设计模式-策略模式(strategy)
- Java开发中的23种设计模式之十三:策略模式(strategy)
- 设计模式之三 --- 策略模式(Strategy Pattern) (java)
- 【java设计模式】之 策略(strategy)模式
- 【java设计模式】之 策略(strategy)模式
- 23设计模式之策略模式(Strategy)
- 23设计模式之策略模式(Strategy)
- 【设计模式】之策略模式(Strategy)
- 设计模式之--策略模式(Strategy)
- 设计模式之策略(strategy)模式
- SoapUI压力测试的指标项说明以及对测试策略的诠释
- PHP去除字符串中的html标签
- HESSION
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- [js对象]JS入门之arguments对象
- java 23种常用设计模式之策略模式(Strategy)
- gpu合并访问和取模对速度的影响
- Java 对Oracle Clob(大字符串)格式的操作 增改查
- 【深度学习】卷积神经网络(Convolutional Neural Network)
- 微信支付常见问题
- 哈希表数组链表表示法示例
- 记一hiredis redisCommand坑
- 安卓图片加载框架的学习
- C++ 中只能在堆或栈上创建的对象