设计模式--策略模式
2016-07-09 15:10
393 查看
示例:
Character是角色类,是抽象类,由具体的角色来继承,Weapon是武器接口,有具体的武器来实现。任何角色想换武器可以有setWeapon方法来实现,在角色fight过程中使用武器的useWeapon方法,进行攻击。
UML:
策略模式: 定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
将WeaponBehavior封装成接口,接口的实现可以相互替换。
原则:
封装变化
把系统中会变化的部分抽取出来进行封装。此处将WeaponBehavior封装起来。
多用组合,少用继承
将角色类和武器类进行组合,少用继承。
针对接口编程,不针对实现编程
实现武器的接口,并不是通过角色类自己来实现。
源码:
Character.java
WeaponBehavior.java
King.java
SwordBehavior.java
测试类:
参考自《设计模式》
Character是角色类,是抽象类,由具体的角色来继承,Weapon是武器接口,有具体的武器来实现。任何角色想换武器可以有setWeapon方法来实现,在角色fight过程中使用武器的useWeapon方法,进行攻击。
UML:
策略模式: 定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
将WeaponBehavior封装成接口,接口的实现可以相互替换。
原则:
封装变化
把系统中会变化的部分抽取出来进行封装。此处将WeaponBehavior封装起来。
多用组合,少用继承
将角色类和武器类进行组合,少用继承。
针对接口编程,不针对实现编程
实现武器的接口,并不是通过角色类自己来实现。
源码:
Character.java
/** * Created by Edward on 2016/7/9. */ public abstract class Character { protected WeaponBehavior weapon; public abstract void fight(); public void setWeapon(WeaponBehavior weapon) { this.weapon = weapon; } }
WeaponBehavior.java
/** * Created by Edward on 2016/7/9. */ public interface WeaponBehavior { void useWeapon(); }
King.java
/** * Created by Edward on 2016/7/9. */ public class King extends Character { @Override public void fight() { this.weapon.useWeapon(); } }
SwordBehavior.java
/** * Created by Edward on 2016/7/9. */ public class SwordBehavior implements WeaponBehavior { @Override public void useWeapon() { System.out.println("use Sword!"); } }
测试类:
/** * Created by Edward on 2016/7/9. */ public class Test { public static void main(String[] args) { Character king = new King(); WeaponBehavior sword = new SwordBehavior(); king.setWeapon(sword); king.fight(); } }
参考自《设计模式》
相关文章推荐
- LCD 常用的客观效果指标和测试方法
- 【训练题】二分图判定
- UE4中dynamic create component及ChildActorComponent未解析符号 问题
- typescript学习视频
- python 模拟ajax请求
- 杭电1018 BIG NUMBER
- 工具使用-Maven打包问题
- LCD 常用的客观效果指标和测试方法
- 牛人经验3(IC设计行业分类辨析)
- msm8916 lcd 相关调试点指导
- 人才济济的时代诚信才能脱颖而出
- android完美退出自身进程的方法
- msm8916 lcd 相关调试点指导
- 第27章 结构型模式大PK
- iOS UIScrollView 滚动到当前展示的视图居中展示
- 解决office2010安装过程出错的问题
- 网络流初步-最大流
- Centos7 安装memcached
- Velocity #if/#else指令
- HDU 5384 AC自动机模版