设计模式之命令模式

设计模式之命令模式

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

如果你有一个对象,有人向这个对象发送请求,关键点在于这个对象,我们有一个对象,有人向这个对象发送请求。这个请求就是我们想要封装的,不是封装这个请求的接收者,也不是封装这个请求的发送者,而是封装在两者之间的这个请求。

UML类图

image-20211102210516491

image-20211102212819929

案例

public class Client {
	
	public static void main(String[] args) {
		Light light=new Light();
		Invoker invoker=new Invoker(new LightOnCommand(light), new LightOffCommand(light));
		invoker.clickOn();
		invoker.clickOff();
	}
}

public interface ICommand {
	void execute();
	void unexecute();
}
public class Invoker {
	ICommand on;
	ICommand off;
	public Invoker(ICommand on,ICommand off) {
		// TODO Auto-generated constructor stub
		this.on=on;
		this.off=off;
	}
	public void clickOn() {
		on.execute();
	}
	public void clickOff() {
		off.execute();
	}
}
public class Light {
	
	void On() {
		System.out.println("The Light is on");
	}
	
	void Off() {
		System.out.println("The Light is off");
	}
}
public class LightOffCommand implements ICommand{

	Light light;
	public LightOffCommand(Light light) {
		// TODO Auto-generated constructor stub
		this.light=light;
	}
	@Override
	public void execute() {
		// TODO Auto-generated method stub
		this.light.Off();
	}

	@Override
	public void unexecute() {
		// TODO Auto-generated method stub
		this.light.On();
	}

}

public class LightOnCommand implements ICommand{

	Light light;
	
	public LightOnCommand(Light light) {
		// TODO Auto-generated constructor stub
		this.light=light;
	}
	@Override
	public void execute() {
		// TODO Auto-generated method stub
		light.On();
	}

	@Override
	public void unexecute() {
		// TODO Auto-generated method stub
		light.Off();
	}
	
}

image-20211102215621874

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值