命令模式UML.png命令模式
class GameBoy{
public void toLeft(){
//左移
}
public void toRight(){
//右移
}
public void toTop(){
//上移
}
public void toBottom(){
//下移
}
public void toA(){
//A键出拳
}
public void toB(){
//B键踢腿
}
}
GameBoy,游戏机类
interface Command{
void execute();
}
按钮接口
class LeftCommand implements Command{
private GameBoy gameBoy;
public LeftCommand(GameBoy gameBoy){
this.gameBoy = gameBoy;
}
public void execute(){
gameBoy.toLeft();
}
}
class RightCommand implements Command{
private GameBoy gameBoy;
public RightCommand(GameBoy gameBoy){
this.gameBoy = gameBoy;
}
public void execute(){
gameBoy.toRight();
}
}
class TopCommand implements Command{
private GameBoy gameBoy;
public TopCommand(GameBoy gameBoy){
this.gameBoy = gameBoy;
}
public void execute(){
gameBoy.toTop();
}
}
class BottomCommand implements Command{
private GameBoy gameBoy;
public BottomCommand(GameBoy gameBoy){
this.gameBoy = gameBoy;
}
public void execute(){
gameBoy.toBottom();
}
}
class ACommand implements Command{
private GameBoy gameBoy;
public ACommand(GameBoy gameBoy){
this.gameBoy = gameBoy;
}
public void execute(){
gameBoy.toA();
}
}
class BCommand implements Command{
private GameBoy gameBoy;
public BCommand(GameBoy gameBoy){
this.gameBoy = gameBoy;
}
public void execute(){
gameBoy.toB();
}
}
上述六个类是具体的按键 上下左右AB键
class Buttons{
private Command leftCommand,rightCommand,topCommand,bottomCommand,aCommand,bCommand;
public Buttons(Command leftCommand, Command rightCommand, Command topCommand, Command bottomCommand, Command aCommand, Command bCommand){
this.leftCommand = leftCommand;
this.rightCommand = rightCommand;
this.topCommand = topCommand;
this.bottomCommand = bottomCommand;
this.aCommand = aCommand;
this.bCommand = bCommand;
}
public void toLeft(){
leftCommand.execute();
//左移
}
public void toRight(){
rightCommand.execute();
//右移
}
public void toTop(){
topCommand.execute();
//上移
}
public void toBottom(){
bottomCommand.execute();
//下移
}
public void toA(){
ACommand.execute();
//A键出拳
}
public void toB(){
BCommand.execute();
//B键踢腿
}
}
键盘按钮类,开关类
public class Client{
public static void main(String[] args){
GameBoy gameBoy = new GameBoy();//游戏机先创建出来
// 上下左右AB命令
Command leftCommand,rightCommand,topCommand,bottomCommand,aCommand,bCommand;
leftCommand = new LeftCommand(gameBoy);
rightCommand = new RightCommand(gameBoy);
topCommand = new TopCommand(gameBoy);
bottomCommand = new BottomCommand(gameBoy);
aCommand = new ACommand(gameBoy);
bCommand = new BCommand(gameBoy);
// 具体操作的按键
Buttons buttons = new Buttons(leftCommand,rightCommand,topCommand,bottomCommand,aCommand,bCommand);
//按键按下执行操作
buttons.toLeft();
buttons.toRight();
buttons.toTop();
buttons.toBottom();
buttons.toA();
buttons.toB();
}
}
个人总结
上述用例讲的是一个小游戏机运用了命令模式,将按钮这个动作请求和具体实现功能解耦。功能上的解耦伴随的代价是类的数量的增多,在实际开发中根据场景来考量是否采用。
网友评论