Head First---命令模式

命令模式属于对象的行为模式,它把一个请求或者操作封装在一个对象中,以便使用 不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销操作。

命令模式涉及到五个角色:

(1)client:这个客户负责创建一个ConcreteCommand,并设置其接受者。

(2)Invoker:这个调用者持有一个命令对象,并在某个时间点调用命令对象的execute方法,将请求付诸实行。

(3)Receiver:接受者知道如何进行必要的工作,实现这个请求。任何类都可以当接受者。

(4)Command:所有命令的一个接口。调用命令对象的execute方法,就可以让接受者进行相关的动作。这个接口也具备一个undo方法。

(5)ConcreteCommand:定义了动作和接受者之间的绑定关系。调用者只要调用execute方法就可以 发出请求,然后由ConcreteCommand调用接受者的一个或者多个动作。


以餐厅点餐为例

涉及到的对象
1.顾客
2.服务员
3.厨师
4.订单


步骤;
1.顾客创建订单
2.服务员将订单交给厨师
3.厨师将餐点做好给服务员(扩展:厨师有一个订单列表,当订单分为处理中和未处理,如果未处理,则顾客可以取消订单)
4.服务员餐点给到顾客
5.顾客根据订单结账


Client

package com.hm.restaurant;

//Client
public class Client extends Character{
	
	public static void main(String[] args) {
		//创建接受者
		Chef chef = new Chef();
		//创建命令对象:创建订单
		Command order = new Order(chef);
		//Invoker:服务员
		Waiter waiter = new Waiter();
		//takeOrder
		waiter.setCommand(order);
		//orderUp()
		waiter.execute();
	}

}
Waiter:Invoker

package com.hm.restaurant;


//Invoker
public class Waiter extends Character{
	
	Command command;

	//takeOrder();
	public void setCommand(Command command) {
		this.command = command;
	}
	
	public void execute() {
		command.execute();
	}
}

Chef:Receiver

package com.hm.restaurant;

//Receiver
public class Chef extends Character {
    
	public void cook() {
		
	}
}

Order:ConcreteCommand

package com.hm.restaurant;


public class Order implements Command{
	
	//接受者
	Chef chef;
	
	public Order(Chef chef) {
		this.chef = chef;
	}

	@Override
	public void execute() {
		chef.cook();
	}

	@Override
	public void undo() {
		
	}
	
}
Command

package com.hm.restaurant;

public interface Command {
	
	public void execute();
	public void undo();

}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值