设计模式之策略模式
来源:互联网 发布:gtkwave windows 编辑:程序博客网 时间:2024/06/06 17:51
1、策略模式的定义:定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
2、示例:游戏角色与武器的功能实现,不同的角色可以使用不同的武器,而且在游戏过程中可以随时切换武器,为了便于扩展,采用策略模式实现。
//角色的超类,所有的角色都继承自此类public class Character{WeaponBehavior mWeaponBehavior;//定义所使用的武器接口对象,每种武器都会引用实现WeaponBehavior接口对象//更多对象 //超类对角色共性的默认实现....... //打斗的方法public void performFight(){mWeaponBehavior.useWeapon();} public void setWeaponBehavior(WeaponBehavior weaponBehavior){ this.mWeaponBehavior=weaponBehavior;} } //国王角色,继承自超类Characterpublic Class King extends Character{ public King(){//国王使用SwordBehavior类(宝剑)进行打斗,当performFight()被调用时用宝剑攻击对方mWeaponBehavior=new SwordBehavior(); //更多对象 ......}} //骑士角色,继承自超类Characterpublic Class Knight extends Character{ public Knight(){//骑士使用BowAndArrowBehavior类(弓箭)进行打斗,当performFight()被调用时用弓箭攻击对方 mWeaponBehavior=new BowAndArrowBehavior(); //更多对象 ......}} //更多种类的角色类实现...... //武器的接口public interface WeaponBehavior{ //定义统一的攻击方法 public void useWeapon();} //宝剑的实现类public class SwordBehavior implements WeaponBehavior{//实现发声的方法public void useWeapon(){System.out.println("实现用宝剑攻击");}} //弓箭的实现类public class BowAndArrowBehavior implements WeaponBehavior{//实现发声的方法public void useWeapon(){System.out.println("实现用弓箭攻击");}} //更多的武器实现类......
3、总结:此例子虽然简单,但是突出了策略模式的精髓:封装了变化的部分(不同的角色可以使用不同的武器),使变化的部分独立于不变的部分;面向接口编程,而非面向实现编程,使代码更有弹性,并且可以通过setter方法在打斗过程中动态的改变角色所使用的武器;利用组合的方式成功的扩展了对象的功能,避免了利用继承带来的代码重写等问题。
注:此例子模仿深入浅出设计模式一书中关于策略模式的讲解中的例子。
0 0
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- C++primer plus第六版课后编程练习答案8.3
- oj 1026 丑数
- Entity Framework 系列: 概要
- css简介
- nyoj 79 拦截导弹 【最长递增子序列】
- 设计模式之策略模式
- #pragma部分用法
- 通过Htmlunit操作模拟百度查询接口的填写与提交
- android源码开发之Camera添加自动对焦ListPreference,camera,key
- sublime text2 使用技巧之快捷键
- iOS开发的52个要点纪要之四
- 跨区域 Scrum 团队项目管理经验谈
- ListView
- LeetCode145——Binary Tree Postorder Traversal二叉树后序遍历