设计模式之命令模式-command

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

每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。

  命令允许请求的一方和接收请求的一方能够独立演化,从而具有以下的优点:

  (1)命令模式使新的命令很容易地被加入到系统里。

  (2)允许接收请求的一方决定是否要否决请求。

  (3)能较容易地设计一个命令队列。

  (4)可以容易地实现对请求的撤销和恢复。

  (5)在需要的情况下,可以较容易地将命令记入日志。

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

public class CreateConmand implements Command{

	private Reicever reicever;
	
	public CreateConmand(Reicever reicever)
	{
		this.reicever=reicever;
	}
	@Override
	public void execute() {
		// TODO Auto-generated method stub
		reicever.action();
	}
	@Override
	public void unDo() {
		// TODO Auto-generated method stub
		reicever.undo();
	}
	
}

public class Invoker {
	private Command command;

	public Command getCommand() {
		return command;
	}
	public void setCommand(Command command) {
		this.command = command;
	}
	public void executeConmand()
	{
		command.execute();
	}
	public void undoConmand()
	{
		command.unDo();
	}
}
public class Reicever {
	public void action()
	{
		System.out.println("执行命令");
	}
	public void undo()
	{
		System.out.println("撤销命令");
	}
}


public static void main(String[] args)
{
	Reicever reicever=new Reicever();
	Command command=new CreateConmand(reicever);
	
	Invoker invoker=new Invoker();
	invoker.setCommand(command);
	invoker.executeConmand();
	invoker.undoConmand();
	
	
}

在程序运行的时候,Invoker只需要发送命令,不用知道接收者是谁,也不需要知道接受者是谁,只需要知道命令执行了没有就足以。


执行结果:

执行命令
撤销命令



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值