设计模式---策略模式(Strategy Pattern)
来源:互联网 发布:tomcat修改端口不生效 编辑:程序博客网 时间:2024/05/22 02:31
先说几个例子,让大家对策略模式有个感性的认识;比如玩RPG游戏时,一个人物可以拥有多种武器,但是攻击时只能使用一把武器,切换武器的过程其实就是一个策略模式的应用。
故事案例:鸭子很多种(活生生的鸭子,橡皮鸭,模型鸭,木头鸭。。。),共性是可以swim,display(即给别人看),活生生的鸭子可以嘎嘎叫,橡皮鸭子可以吱吱叫,模型鸭可以飞,木头鸭什么特别之处都没有,那我们怎么处理这个问题呢?
思路一:鸭子作为一个抽象类(Duck),然后这些具体的鸭子就继承他,并重新新增一些自己特有的方法。(好像感觉挺好的设计是吧!清晰明了!)
缺陷:代码的可重用性不高,两个不同类型的鸭子,如果都可以嘎嘎叫,那么嘎嘎叫的方法(我把它定义quack())需要写两遍,两个还好啊,那要是一百个呢。。。
思路二:既然要代码可重用性高的话,那么把quack()方法放到抽象类中,不同的鸭子去继承他就行了,但是还是有问题,第一:我的模型鸭不会叫,你现在却可以让他嘎嘎叫,第二:我的橡皮鸭是吱吱叫,现在却是嘎嘎叫。。。有人就会说,我可以在子类重载这些方法啊,还是那个问题,一百个呢,而且还容易改出错。
思路三:设计原则是:多用组合,少用继承;现在我来说说这个的意思,对于不同的鸭子,他们的行为是不同的,从而导致处理方式不同,那么我们把不同的行为看成不同的算法;对于鸭子来说,他们应该是拥有(has-a)某种行为,而不是这种行为是(is-a)某种鸭子的;所以,把不同的行为定义为不同的类或接口。(QuackBehavior 和 FlyBehavior),具体的行为就实现这两种接口即可。
对于抽象类鸭子(Duck)只需持有这两种行为的父类(面向接口编程)引用,就可以实现不同行为的切换。
对应的UML图:
没有工具所以偷懒了。。。
- 设计模式 - Strategy Pattern(策略模式)
- 设计模式 - Strategy Pattern(策略模式)
- 设计模式20:Strategy Pattern (策略模式)
- 设计模式-策略模式(Strategy Pattern)
- 设计模式:策略模式 strategy pattern
- java设计模式---Strategy Pattern---策略模式
- 设计模式之策略模式(Strategy Pattern)
- [设计模式]Strategy Pattern(策略模式).(1)
- 设计模式-策略模式(Strategy Pattern)
- c++设计模式:策略模式(Strategy Pattern)
- 设计模式学习--策略模式(Strategy Pattern)
- 设计模式原来如此-策略模式(Strategy Pattern)
- 设计模式-策略模式 Strategy Pattern
- 设计模式 - 策略模式(Strategy Pattern) 详解
- 设计模式 - 策略模式(Strategy Pattern) 详解
- 设计模式心得:策略模式 (strategy pattern)
- 设计模式-策略模式(strategy pattern)
- 设计模式学习--策略模式(Strategy Pattern)
- JQuery的父、子、兄弟节点查找方法
- greenplum数据库性能分析报告
- ping localhost 没反应解决方案
- Angular JS开发秘籍——互动出版网
- 232用两个栈实现队列
- 设计模式---策略模式(Strategy Pattern)
- 论HashMap、Hashtable、TreeMap、LinkedHashMap的内部排序
- Linux 32位系统中的一些时间转换
- pascal使用细节
- 算法基础(1)-枚举
- js瀑布流滚动加载
- iOS开发系列--地图与定位
- GitHub上史上最全的Android开源项目分类汇总
- 查看端口命名