设计模式——命令模式 【Head First 设计模式】

命令模式——将请求封装成对象,这可以让你使用不同的请求、队列,或者日志请求来参数化其他对象。命令模式也可以支持撤销操作。
类图
在这里插入图片描述
关键代码
使用遥控器打开电灯的例子。
1.命令接口

public interface Command{
	public void execute();
}

2.打开电灯的命令

public class LightOnCommand implements Command{
	Light light;
	
	public LightOnCommand(Light light){
		this.light = light;
	}

	public void execute(){
		light.on();
	}
}

3。遥控器

public class SimpleRemoteControl{
	Command slot;

	public SimpleRemoteControl(){}

	public void setCommand(Command command){
		slot = command;
	}

	public void buttonWasPressed(){
		slot.execute();
	}
}

4.测试类

public class RemoteControlTest{
	public static void main(String[] args){
		SimpleRemoteControl remote = new SimpleRemoteControl();
		Light light = new Light();
		LightOnCommand lightOn = new LightOnCommand(light);

		remote.setCommand(lightOn);
		remote.buttonWasPressed();
	}
}

遥控器类就是调用者,电灯类是接收者,打开电灯命令类封装了遥控器对电灯打开的命令。
在命令模式中还可以加入撤销命令,比如在打开电灯的命令中加入undo()方法,调用light.off()方法,打开电灯命令的撤销操作就写好了。
总结
1、命令模式将发出请求的对象和执行请求的对象解耦。
在一个使用遥控器打开客厅电灯的例子中,利用命令对象,把请求(例如打开电灯)封装成一个特定对象(例如客厅电灯对象)。所以,如果每个按钮都存储一个命令对象,那么当按钮被按下的时候,就可以请命令对象做相关的工作。遥控器并不需要知道工作内容是什么,只要有个命令对象额能和正确的对象沟通,把事情做好就可以了。所以,遥控器和电灯对象解耦了。
2、在被解耦的两者之间是通过命令对象进行沟通的。命令对象封装了接收者和一个或一组动作。
3、调用者通过调用命令对象的execute()发出请求,这会使得接收者得动作被调用。
4、调用者可以接受命令当作参数,甚至在运行时动态地进行。
如有错误欢迎评论指正
本文例子来自《Head First 设计模式》一书,若需要资源可以查看评论区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值