设计模式(2)(策略模式Strategy)
2012-03-06 21:58
155 查看
策略模式(Strategy)
1.网络上的一句话说明
跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,单目的都是为了得到MM的芳心。
2.定义
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
3.设计原则
① 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起
② 针对接口编程,而不是针对实现编程
针对接口编程的真正意思是针对超类型编程
③ 多用组合,少用继承
使用组合的系统有很大的弹性,便于修改和扩展和代码复用的目的。
4.举例说明
假设我们在制作一个动作冒险游戏有骑士和妖怪(以后可能还会有其他)实现他们的攻击
很自然我们会抽象一个角色类出来 在角色类上定义fight()方法 2个子类分别继承它
如果这个时候多出了一个公主 她不会攻击 怎么办?
只有在她类中覆盖fight方法 使其什么都不做。如果游戏后续又会多很多很多角色呢 这种情况下的检查成本和出错概率就会很大
或许我们还会想到用接口的方式只有会攻击的才实现攻击接口 如下图
这会造成很多的重复代码。而且如果这个时候又有新的需求 每个战斗角色可以在游戏中拾取武器从而改变攻击方式。
这个时候我们就得重构代码了 或许说应该重写代码了。
运用策略模式的时候就到了
我们把攻击行为抽象成一个接口 命名为Weapon 由具体类实现这个接口 并分别实现自己的攻击方式
比如有宝剑-Sword 弓箭-BowAndArrow 匕首-Knife 斧头-Axe
再让角色类对Weapon有has-a(有一个)的关系 形成一个组合方式 (多用组合,少用继承设计原则)
调用角色类的fight()时候 到武器具体类去实现(利用java多态特性)
如下图:
character源代码
OK策略模式就完了。以上是参考书籍和网络上总结而来,欢迎批评指正。
1.网络上的一句话说明
跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,单目的都是为了得到MM的芳心。
2.定义
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
3.设计原则
① 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起
② 针对接口编程,而不是针对实现编程
针对接口编程的真正意思是针对超类型编程
③ 多用组合,少用继承
使用组合的系统有很大的弹性,便于修改和扩展和代码复用的目的。
4.举例说明
假设我们在制作一个动作冒险游戏有骑士和妖怪(以后可能还会有其他)实现他们的攻击
很自然我们会抽象一个角色类出来 在角色类上定义fight()方法 2个子类分别继承它
如果这个时候多出了一个公主 她不会攻击 怎么办?
只有在她类中覆盖fight方法 使其什么都不做。如果游戏后续又会多很多很多角色呢 这种情况下的检查成本和出错概率就会很大
或许我们还会想到用接口的方式只有会攻击的才实现攻击接口 如下图
这会造成很多的重复代码。而且如果这个时候又有新的需求 每个战斗角色可以在游戏中拾取武器从而改变攻击方式。
这个时候我们就得重构代码了 或许说应该重写代码了。
运用策略模式的时候就到了
我们把攻击行为抽象成一个接口 命名为Weapon 由具体类实现这个接口 并分别实现自己的攻击方式
比如有宝剑-Sword 弓箭-BowAndArrow 匕首-Knife 斧头-Axe
再让角色类对Weapon有has-a(有一个)的关系 形成一个组合方式 (多用组合,少用继承设计原则)
调用角色类的fight()时候 到武器具体类去实现(利用java多态特性)
如下图:
character源代码
/*** * 角色类 * @author icetiger * * */ public class Character { /**武器*/ Weapon weapon; public void setWeapon(Weapon weapon) { this.weapon=weapon; } public void fight() { weapon.useWeapon(); } }
OK策略模式就完了。以上是参考书籍和网络上总结而来,欢迎批评指正。
相关文章推荐
- Strategy策略设计模式(对象行为型)
- 设计模式学习之策略模式(Strategy,行为型模式)(13)
- 设计模式之策略模式(Strategy)
- 设计模式随笔系列:鸭子-策略模式(Strategy)
- 设计模式之策略模式(Strategy)
- 设计模式 (一)——策略模式(Strategy,行为型)
- Java 设计模式-策略模式(Strategy)Android讲解
- 设计模式初体验---策略模式Strategy
- 设计模式(三)[策略(Strategy)模式]
- 设计模式之(十八)策略模式Strategy
- Java设计模式透析之 —— 策略(Strategy)
- 设计模式读书笔记之策略模式(Strategy)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- Java设计模式透析之 —— 策略(Strategy)
- 设计模式之Strategy(策略)
- 讲故事学设计模式-策略(Strategy)模式
- 设计模式之Strategy(策略)
- 设计模式系列1-----C++实现策略模式(Strategy)
- java设计模式:策略模式(Strategy)
- 设计模式之策略模式(Strategy)