1.什么是策略模式
策略模式定义了算法簇,分别封装起来,让他们之间可以相互替换,让算法的变化独立于使用算法的客户。
2.设计原则
1.找出应用中的变化之处,把他们独立出来,不要和变化的代码混在一起,系统变的有弹性。
2.面向接口编程,而不是面向实现类编程。
3.多用组合,少用继承。
设计一个动作冒险游戏,存在游戏角色和使用武器行为的类,每个角色一次只能使用一种武器,但是可以在游戏的过程中换武器。
1.首先设计一个武器使用武器行为的接口,将变化抽象出来。
package strategy;
/**
* 使用武器行为的接口
*/
public interface WeaponBehavior {
/**
* 使用武器
*/
void useWeapon();
}
2.实现具体的武器类,实现武器行为接口。
package strategy;
/**
* 斧头武器的实现
*/
public class AxeBehavior implements WeaponBehavior {
@Override
public void useWeapon() {
System.out.println("使用斧头劈砍");
}
}
package strategy;
/**
* 宝剑武器的实现
*/
public class SwordBehavior implements WeaponBehavior {
@Override
public void useWeapon() {
System.out.println("使用宝剑战斗");
}
}
package strategy;
/**
* 匕首武器的实现
*/
public class KnifeBehavior implements WeaponBehavior {
@Override
public void useWeapon() {
System.out.println("使用匕首刺杀");
}
}
3.设计游戏角色的抽象类,持有武器行为的接口
package strategy;
/**
* 游戏角色的抽象类
*/
public abstract class Character {
/**
* 将变化的封装起来
*/
WeaponBehavior weapon;
abstract void fight();
public void setWeapon(WeaponBehavior weapon) {
this.weapon = weapon;
}
}
4.实现具体的游戏角色
package strategy;
/**
* 国王角色
*/
public class King extends Character{
@Override
void fight() {
weapon.useWeapon();
}
}
package strategy;
/**
* 女王角色
*/
public class Queen extends Character{
@Override
void fight() {
weapon.useWeapon();
}
}
package strategy;
/**
* 妖怪角色
*/
public class Troll extends Character {
@Override
void fight() {
weapon.useWeapon();
}
}
package strategy;
public class App {
public static void main(String[] args) {
Character character = new King();
WeaponBehavior weapon = new KnifeBehavior();
WeaponBehavior sword = new SwordBehavior();
character.setWeapon(weapon);
character.fight();
character.setWeapon(sword);
character.fight();
}
}
运行结果如下,国王角色可以使用匕首进行刺杀,也可以换武器使用宝剑进行战斗。
使用匕首刺杀
使用宝剑战斗
网友评论