设计模式之命令模式

一.命令模式的定义

将一个请求封装成对象,从而使不同的请求参数化,对请求排队、记录以及撤销,是一种行为性模式

二.命令模式的写法

命令模式有四个角色,一个Invoke(负责接收处理指令)抽象的指令Command 具体的指令ConcreteCommand以及命令的执行者Receiver。 这里拿我们到饭店吃饭时点餐的例子,来看看下面的UML类图
在这里插入图片描述
我们来看看代码这么写的,首先看服务员代码,通过UMLl类图知道,服务员只需要知道命令,并可以取消,执行,添加命令即可:

/**
 * 理解成服务员
 * @author Seven
 *
 */
public class Invoker {

	List<Command> commands=new ArrayList<>();
	
	public void addCommand(Command command) {
		System.out.println("服务员将客人命令追加到队列中");
		commands.add(command);
		
	}
	public void execute() {
		System.out.println("服务员执行客人的命令对列");
		for (Command command : commands) {
			command.executeCommand();
		}
	}
	
	public void removeCommand(Command command) {
		System.out.println("服务员将客人命令取消");
		commands.remove(command);
	}
}

那抽象命令应该怎么写呢,首先是有个具体执行者的引用,也就是厨师,然后将执行方法抽象出来,对应的命令有对应的实现,下面请看代码:

/**
 * 理解成抽象的行为 比如烤鸡 烤羊肉串
 * 
 * @author Seven
 *
 */
public abstract class Command {
	protected Receiver receiver;


	public void setCommand(Receiver receiver) {
		this.receiver = receiver;
	}

	public abstract void executeCommand();
}

/** 具体的命令比如烤鸡
 * @author Seven
 *
 */
public class ConcreteCommand  extends Command{


	@Override
	public void executeCommand() {
			if(receiver!=null) {
				receiver.execute();
			}else {
				System.out.println("no executor");
			}
	}

}

下面就是大厨也就是接受命令、执行干活的人了

/**
 * 真正的执行者 比如大厨
 * @author Seven
 *
 */
public class Receiver {

	public void execute() {
		System.out.println("干活");
	}

}

好了,这个就是命令模式,他这个有点像生产消费者模型,服务员生产需求,大厨赋值执行需求,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值