java设计模式——命令模式

本文介绍了设计模式中的命令模式,包括定义、组成元素及其实现方式。通过遥控器控制电灯的例子展示了命令模式的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

设计模式 —— 命令模式(Command Pattern)


图:百度百科                                                            

Client(客户):负责创建一个具体的命令(Concrete Command),并设置其接收者

Invoker(调用者):调用者持有一个命令对象,并在某个时刻调用命令对象的 execute() 方法。

Command(命令接口):包含命令对象的 execute() 方法和 undo() 方法。

ConcreteCommand(具体命令):实现命令接口。包括两个操作,执行命令和撤销命令。

Receiver(接收者):接受命令并执行。


例子

通过遥控器打开电灯

Light

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

    public void off() {
        System.out.println("light off");
	}
}

Command

public interface Command {
	void execute();
}

LightOnCommand

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

SimpleRemoteControl

public class SimpleRemoteControl {
	Command slot;

	public void setCommand(Command slot) {
		this.slot = slot;
	}
	
	public void buttonWasPressed() {
		slot.execute();
	}
}

RemoteControllerTest

public class RemoteControllerTest {
	public static void main(String[] args) {
		SimpleRemoteControl remote = new SimpleRemoteControl();
		Light light = new Light();
		LightOnCommand lightOn = new LightOnCommand(light);
		
		remote.setCommand(lightOn);
		remote.buttonWasPressed();
	}
}


撤销

可通过简单地记录最后一个被执行的命令,或使用一个堆栈记录操作过程的每一个命令。

宏命令

public class MacroCommand implements Command {
	Command[] commands;
	
	public MacroCommand(Command[] commands) {
		this.commands = commands;
	}
	public void execute() {
		for(int i=0; i<commands.length; i++) {
			commands[i].execute();
		}
	}
}

空对象(null object)

一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以

在数据不可用的时候提供默认的行为。

例如:遥控器不可能一出厂就设置了有意义的命令对象,所以提供了NoCommand对象作为代用品,当调用它的execute()方法时,这种对象是什么事情都不做.

public class NoCommand implements Command {

	public void execute() {	}
}

在许多设计模式中,都会看到空对象的使用。甚至有些时候,空对象本身也被视为是一种设计模式。


参考:

《Head first 设计模式》

设计模式 —— 命令模式(Command Pattern)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值