首页 > 学院 > 开发设计 > 正文

java设计模式之命令模式

2019-11-14 10:02:47
字体:
来源:转载
供稿:网友

命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

命令模式类图: 这里写图片描述 下面我们来用命令模式来实现控制灯的开关。 类图: 这里写图片描述 RemoteLoader来下发开/关灯的命令,RemoteControl来设置要调用的接口是LightOnCommand/LightOffCommand,最后由Light对象来实现具体的命令。

Light类代码实现:

public class Light { public void on(){ System.out.PRintln("turn light on"); } public void off(){ System.out.println("turn light off"); }}

Command接口代码实现:

public interface Command { public void execute(); public void undo();}

LightOnCommand类代码实现:

public class LightOnCommand implements Command{ Light light; public LightOnCommand(Light light){ this.light = light; } @Override public void execute() { // TODO Auto-generated method stub light.on(); } @Override public void undo() { // TODO Auto-generated method stub light.off(); }}

LightOffCommand类代码实现:

public class LightOffCommand implements Command{ Light light; public LightOffCommand(Light light){ this.light = light; } @Override public void execute() { // TODO Auto-generated method stub light.off(); } @Override public void undo() { // TODO Auto-generated method stub light.on(); }}

RemoteControl类代码实现:

public class RemoteControl { Command command; public void setCommand(Command command){ this.command = command; } public void buttonWaspushed(){ command.execute(); } public void undoButtonWasPushed(){ command.undo(); }}

RemoteLoader类代码实现:

public class RemoteLoader { public static void main(String[] args){ Light light = new Light(); Command lightOnCommand = new LightOnCommand(light); Command lightOffCommand = new LightOffCommand(light); RemoteControl remoteControl = new RemoteControl(); remoteControl.setCommand(lightOnCommand); remoteControl.buttonWasPushed(); remoteControl.undoButtonWasPushed(); remoteControl.setCommand(lightOffCommand); remoteControl.buttonWasPushed(); remoteControl.undoButtonWasPushed(); }}

运行结果:

turn light onturn light offturn light offturn light on
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表