Java设计模式之策略模式
2015-09-14 23:21
246 查看
1.什么是策略模式
策略模式:定义算法族,分别分装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
2.设计基础
抽象、封装、多态、继承
3.设计原则
(1)封装变化
(2)多用组合,少用继承
(3)针对接口编程,不针对实现编程
4 .策略模式中有三个对象:
(1)环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用。
(2)抽象策略对象:它可由接口或抽象类来实现。
(3)具体策略对象:它封装了实现同不功能的不同算法。
利用策略模式构建应用程序,可以根据用户配置等内容,选择不同有算法来实现应用程序的功能。具体的选择有环境对象来完成。采用这种方式可以避免由于使用条件语句而带来的代码混乱,提高应用程序的灵活性与条理性。
5.应用场景举例
有一个动作冒险游戏,不同的游戏角色可以使用不同的武器行为,每次角色一次只能使用一种武器,但是可以在游戏的过程中换武器。
游戏角色:抽象类
package com.hotax.design.strategy; /** * Created by chaovi on 2015/9/14. * 环境对象,引用策略接口 */ public abstract class Character { protected WeaponBehavior weapon; public abstract void fight(); public void setWeapon(WeaponBehavior weapon) { this.weapon = weapon; } }
具体的角色实现类:国王
package com.hotax.design.strategy; /** * Created by chaovi on 2015/9/14. */ public class Knight extends Character { public Knight() { //默认武器是宝剑 this.weapon = new SwordBehavior(); } @Override public void fight() { System.out.println("国王骑上了马..."); System.out.print("国王的战斗方式:"); this.weapon.useWeapon(); } }
具体的角色实现类:巨魔
package com.hotax.design.strategy; /** * Created by chaovi on 2015/9/14. */ public class Troll extends Character { public Troll() { //默认武器是斧头 this.weapon = new AxeBehavior(); } @Override public void fight() { System.out.println("巨魔奔跑..."); System.out.print("巨魔的战斗方式:"); this.weapon.useWeapon(); } }
策略接口,不同的武器行为都一个共同的功能:被使用
package com.hotax.design.strategy; /** * Created by chaovi on 2015/9/14. * 策略接口 */ public interface WeaponBehavior { public void useWeapon(); }
具体的武器接口实现类:宝剑
package com.hotax.design.strategy; /** * Created by chaovi on 2015/9/14. */ public class SwordBehavior implements WeaponBehavior { @Override public void useWeapon() { System.out.println("用宝剑挥舞"); } }
具体的武器接口实现类:斧头
package com.hotax.design.strategy; /** * Created by chaovi on 2015/9/14. */ public class AxeBehavior implements WeaponBehavior { @Override public void useWeapon() { System.out.println("用斧头砍杀"); } }
开始战斗了,调用者
package com.hotax.design.strategy; import java.lang.*; /** * Created by chaovi on 2015/9/14. */ public class InvokeClient { public static void main(String[] args) { Character knight = new Knight(); //国王开始战斗 knight.fight(); //国王想换斧头战斗 knight.setWeapon(new AxeBehavior()); knight.fight(); Character troll= new Troll(); //巨魔开始战斗 troll.fight(); } }
后续如果游戏增加更多的角色,更多的武器的话,只需要角色继承Character抽象类,武器行为实现WeaponBeahavior就可以了。
相关文章推荐
- java设计模式之 策略模式
- All About JAVA 关于设计模式中的“策略模式”
- java设计模式---策略模式
- [设计模式] - 策略模式(Java篇)
- java设计模式之策略模式
- OOP设计模式[JAVA]——01策略模式
- JAVA系列-设计模式-策略模式
- Java设计模式 Design Pattern:策略模式 Strategy Pattern
- 设计模式之三 --- 策略模式(Strategy Pattern) (java)
- JAVA设计模式---策略模式-2011-05-13
- Java设计模式十: 策略模式(Strategy)
- java设计模式---策略模式
- Java设计模式笔记之策略模式
- 初学者学Java设计模式(二)---------策略模式
- java设计模式之策略模式
- [设计模式] - 策略模式(Java篇)
- java设计模式之策略模式
- Java设计模式——策略模式
- java 设计模式学习笔记十五 strategy 策略设计模式
- java 设计模式 桥接模式和策略模式的区别