Strategy模式的一点思考
"策略模式是对算法的包装,是把使用算法的责任和算法本身分割开,委派给不同的对象管理......"(<java与模式>),其简单示意类图如下:
文中提到,策略模式仅仅是封装算法,至于客户端具体要使用哪个具体策略类,则由客户端去判断。
个人十分不理解这种做法,既然要客户端知道所有的具体策略类,并且去判断使用谁,那何必对具体策略类进行抽象呢?进行抽象后,客户端可能会如下使用各种策略:
IStrategy someStrategy = new ConcreteStrategy1();
someStrategy.doSomething(); //运行策略
IStrategy otherStrategy = new ConcreteStrategy2();
otherStrategy .doSomething(); //运行策略
我实在看不到强大的“抽象”工具在这里提供的好处,如果不进行抽象同样可以通过:ConcreteStrategy1 someStrategy = new ConcreteStrategy1();来进行具体策略的使用。难道说这个抽象仅仅是为了规范接口而已?
具体例子:在<java与模式>中,举了使用Strategy模式的一个例子--图书折扣的计算,在这个例子中,客户端要对图书进行判断,属于哪类折扣书籍,然后再实例化具体的策略类进行调用。个人认为,这并不符合设计模式中职责分离的原则,一些不应该有客户来做的事却分配到了客户对象里。我觉得,客户所应该做的仅仅是,他得到一批书籍,现在想知道这批书籍的折扣,具体哪本书怎么折扣应该交给其他对象来计算。所以,我想象中的策略模式应该在Client和IStrategy之间再加入一个策略管理对象,大概示意图如下:
这样就把判断使用哪个具体策略的职责转嫁到了StrategyManager上,当然,Client需要将某些标识传给StrategyManager以判断选择哪个具体策略类。我认为这样可以进一步简化客户端的编码,同时也利于维护和扩展。
以上就是个人对策略模式的一点思考,如有不妥之处,还望各位指教~~
转载于:https://www.cnblogs.com/DotNetFresh/archive/2005/06/24/180278.html
Strategy模式的一点思考相关推荐
- 对策略模式与状态模式的一点思考
在以前的一片博文里 http://www.cnblogs.com/mightofcode/archive/2012/11/19/2771216.html,我发表了我对设计模式的一点看法 但是今天的一个 ...
- 奇幻RPG(角色技能 与 Strategy模式)
奇幻RPG(角色技能 与 Strategy模式) 引言 看过一些设计模式方面的书籍和文章,虽然很正式,很权威,(也觉得有那么一点刻板),总是觉得让人不那么好靠近.于是,我思考着像写故事一样来写下自己对 ...
- Strategy模式
一.从订餐开始<?XML:NAMESPACE PREFIX = O /> 小王和小刘两人到餐厅点餐,两人分别如下告诉厨师. 小王:我要一杯加了香草冰淇淋的巧克力汽水. 小刘:一个黑与白. ...
- 关于STM32驱动DS1302实时时钟的一点思考
关于STM32驱动DS1302实时时钟的一点思考 之前用51驱动过DS1302,没用多久就输出了正确的时间.当时以为这块芯片其实没啥,很简单.但是现在用STM32做项目,用到同样的芯片,以为这有何难, ...
- python多线程队列处理_Python线程和队列使用的一点思考
Python线程和队列使用的一点思考 1. 斗哥采访环节请问为什么要使用线程? 答:为了提高程序速度,代码效率呀. 请问为什么要使用队列? 答:个人认为队列可以保证线程安全,实现线程间的同步,比较稳. ...
- 关于前端职业规划的一点思考
自己目前已经工作3年了,最近也刚换了新工作,日常也一直在考虑自己的前端职业规划到底是怎样的,目前个人视角还不是很宽广,怕误人子弟,以下这篇文章有点启发,故转发供大家借鉴(里面有部分内容做了一些小修改) ...
- 关于优质博客聚合的一点思考
前言 随着互联网时代的到来,我们发现知识的获取不再像历史上任何一个时代那么复杂,而是变得十分的简单.互联网每天都在产生巨大的信息,这些信息又多又杂,可谓是知识的海洋,太多优质的内容就这样悄无声息的被淹 ...
- 关于精准测试的一点思考
精准测试是现代软件测试面临的一个重大挑战.这个挑战来源于两方面的背景. 一,软件测试资源有限.如何提高资源利用率,减少资源浪费,有针对性而不是漫无目的地进行软件测试? 二,软件测试复杂度高.如何克服各 ...
- 【工业互联网】关于制造业新思维和工业互联网机理的一点思考
关于制造业新思维和工业互联网机理的一点思考(上) 来源: 工业互联网产业联盟 <深化"互联网+先进制造业"发展工业互联网的指导意见>已经国务院常务会议审议通过.工业互 ...
- Strategy模式和Template Method模式的异同浅析
一.Strategy模式 1. 特点说明: 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换. 适用场景: 许多相关的类仅仅是行为有异."策略"提供了一种用多个行为中的 ...
最新文章
- git push origin master和git push有什么区别?
- Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test)
- 哈夫曼编码(Huffman)Java实现代码简化版
- 【嵌入式】Libmodbus源码分析(一)-类型和结构体
- Integer的==问题
- 在Web中如何运用JavaScript实现打印功能
- 什么是 TypeScript 的 Module Augmentation
- springCloud工作笔记090---SpringCloud_redis配置多数据源_redis多数据源
- Excel中如何引用 「文件名」、「sheet 页」的名字
- 机器人庄园作文_2018年6月四级作文热点话题预测:高端的机器人
- Delphi7·ProgressBar控件
- 【Multisim仿真】双向晶闸管功能演示
- MySQL高级面试题
- 在线HTTP POST/GET接口测试 地址
- 苹果手机可以微信分身吗_微信和微信分身版有区别吗
- 惠普台式计算机耳机插口,惠普耳机插在台式电脑上没声音,为什么
- 基于Robopeak触摸屏和官方摄像头的树莓派照相机
- php 中cookie的简介,setcookile() 的用法,如何理解cookie
- 什么是HTTPS证书
- 硬盘格式化数据恢复(图文教程)