StrategyPattern(策略模式)
2018-01-24 本文已影响0人
jsjack_wang
1.简介
策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
2.设计原则
2.1 将类中不变的与变化的区分抽象出来
2.2 面向接口编程
2.3 多用组合, 少用继承
3.小李子
游戏中有很多角色,每个角色所用武器可能不同,并且是可以实时切换武器的,这时候就要用到策略模式。
4.实现
4.1 Character.java 人物基类
public abstract class Character {
protected WeaponBehavior weaponBehavior;
public void setWeaponBehavior(WeaponBehavior weaponBehavior) {
this.weaponBehavior = weaponBehavior;
}
abstract void getCharacterName();
abstract void fight();
}
4.2 Troll.java 怪物角色 默认武器就是拳头
public class Troll extends Character {
public Troll() {
this.weaponBehavior = new DefaultWeaponBehavior();
}
@Override
void getCharacterName() {
System.out.println("怪人");
}
@Override
void fight() {
this.weaponBehavior.fight();
}
}
4.3 DefaultWeaponBehavior.java 默认武器是拳头
public class DefaultWeaponBehavior implements WeaponBehavior {
@Override
public void fight() {
System.out.println("没有武器, 只是拳头");
}
}
4.4 GunBehavior.java 武器枪
public class GunBehavior implements WeaponBehavior {
@Override
public void fight() {
System.out.println("现在我的武器是GUN");
}
}
4.5 所有武器都实现WeaponBehavior接口
public interface WeaponBehavior {
void fight();
}
5.测试
public class StrategyPatternDemo {
public static void main(String[] args) {
Troll troll = new Troll();
troll.getCharacterName();
troll.fight();
troll.setWeaponBehavior(new GunBehavior());
troll.fight();
}
}
result:
怪人
没有武器, 只是拳头
现在我的武器是GUN
6.总结
看上面实例,武器随时可以切换,开始是拳头后来是GUN。策略模式大概就是这样。