前言
最近看设计模式的书籍,觉得很难理解,跟着书本敲代码又没什么长进,索性想了一个比较好玩的方式来学习设计模式。我曾经是一个游戏迷,特别喜欢玩一款回合制策略游戏:超级机器人大战(Super Robot War:简称SRW),于是我就打算把设计模式的思想来到游戏里面,增进自己的理解。
第一篇设计模式打算写策略模式,通过策略模式模拟机体的各种行动。
背景
SRW是回合制游戏,每回合玩家需要控制机体完成一次行动,行动有三种:移动、攻击和精神。
- 移动:机体移动一定的格数
- 攻击:机体选择武器攻击敌人
- 精神:选中某种能力,使机体拥有该能力。比如必闪,表示该回合机体一定能够躲避敌人攻击
实现
行为接口:所有行为都必须实现Behavior接口
/**
* 机体的行动
*/
public interface Behavior {
void action();
}
移动行为:机体的移动行为
/**
* 移动机体
*/
public class MoveBehavior implements Behavior {
@Override
public void action() {
System.out.println("移动5格!");
}
}
攻击行为:机体的攻击行为
/**
* 对敌人发动攻击
*/
public class AttackBehavior implements Behavior {
@Override
public void action() {
System.out.println("左轮打桩机!");
}
}
精神行为:机体使用精神的行为
/**
* 使用精神指令,如必闪,一回合内必定躲避敌人的攻击
*/
public class SpiritBehavior implements Behavior {
@Override
public void action() {
System.out.println("热集必闪!");
}
}
错误行为:机体错误的行为
/**
* 错误的行为
*/
public class WrongBehavior implements Behavior {
@Override
public void action() {
System.out.println("错误的行为!");
}
}
行为上下文:叫BehaviorContext好拗口~~
public class BehaviorContext {
private Behavior behavior;
public BehaviorContext(Behavior behavior) {
super();
this.behavior = behavior;
}
public void action() {
behavior.action();
}
}
开玩:?O(∩_∩)O
/**
* srw策略模式
*/
public class BehaviorTest {
public static void main(String[] args) {
System.out.println("请选择行动方式(输入数字):");
System.out.println("1.移动");
System.out.println("2.攻击");
System.out.println("3.精神");
Behavior behavior = null;
BehaviorContext context = null;
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
while (number != 0) {
switch (number) {
case 1:
behavior = new MoveBehavior();
break;
case 2:
behavior = new AttackBehavior();
break;
case 3:
behavior = new SpiritBehavior();
break;
default:
behavior = new WrongBehavior();
break;
}
context = new BehaviorContext(behavior);
context.action();
number = sc.nextInt();
}
}
}
输出结果
请选择行动方式(输入数字):
1.移动
2.攻击
3.精神
1
移动5格!
2
左轮打桩机!
3
热集必闪!
4
错误的行为!
0
总结
使用策略模式模拟机体的三种行为:移动、攻击和精神。是不是觉得很有趣(一点都不)?希望给大家带来不一样的设计模式博客,如果你是机战迷,你会觉得很亲切~~