定义:
命令模式:将一个请求封装为一个对象,从而使你可用冉的请求对客户进行参数化;对请求排队或记录请求日志,以及支持课撤销的操作。
UML:

命令模式涉及到五个角色,它们分别是:
优点:
?实例:
主要实现功能:客户打算要点两次烤羊肉,一次烤鸡肉。
package com.zcr.Command;
//烧烤人员
public class Barbecuer
{
? ? //烤羊肉
? ? public void BakeMutton()
? ? {
? ? ? ? System.out.println("烤羊肉!!");
? ? }
? ?
? ? //烤鸡翅
? ? public void BakeChickenWing()
? ? {
? ? ? ? System.out.println("烤鸡翅!!");
? ? }
}
抽象命令类
package com.zcr.Command;
public abstract class Command
{
? ? protected Barbecuer receiver;
? ?
? ? public Command()
? ? {
? ? ? ?
? ? }
? ?
? ? public Command(Barbecuer barbecuer)
? ? {
? ? ? ? this.receiver = barbecuer;
? ? }
? ?
? ? //执行命令
? ? abstract public void ExcuteCommand();
}
具体命令类
package com.zcr.Command;
//烤鸡翅命令
public class BakeChickenWingCommand extends Command
{
? ? public BakeChickenWingCommand(Barbecuer barbecuer)
? ? {
? ? ? ? //receiver 来自父类
? ? ? ? receiver = barbecuer;
? ? }
? ? @Override
? ? public void ExcuteCommand()
? ? {
? ? ? ? receiver.BakeChickenWing();
? ? }
? ?
}
具体命令类
package com.zcr.Command;
//烤羊肉命令
public class BakeMuttonCommand extends Command
{
? ? public BakeMuttonCommand(Barbecuer barbecuer)
? ? {
? ? ? ? //receiver 来自父类
? ? ? ? receiver = barbecuer;
? ? }
? ? @Override
? ? public void ExcuteCommand()
? ? {
? ? ? ? receiver.BakeMutton();
? ? ? ?
? ? }
? ?
}
服务员类?
package com.zcr.Command;
public class Waiter
{
? ? private Command command;
? ?
? ? //设置订单
? ? public void SetOrder(Command command)
? ? {
? ? ? ? this.command = command;
? ? }
? ?
? ? //通知执行
? ? public void Notify()
? ? {
? ? ? ? command.ExcuteCommand();
? ? }
}
?
package com.zcr.Command;
public class TestCommand
{
? ? public static void main(String[] args)
? ? {
? ? ? ? //开店前准备,烧烤店实现就找好了烤肉厨师,服务员和烤肉菜单没等客户上门
? ? ? ? Barbecuer boy = new Barbecuer();
? ? ? ? Command bakeMuttonCommand1 = new BakeMuttonCommand(boy);
? ? ? ? Command bakeMuttonCommand2 = new BakeMuttonCommand(boy);
? ? ? ? Command bakeChiCommand = new BakeChickenWingCommand(boy);
? ? ? ? Waiter girl = new Waiter();
? ? ? ?
? ? ? ? //开门营业,
? ? ? ? girl.SetOrder(bakeMuttonCommand1);
? ? ? ? girl.Notify();
? ? ? ? girl.SetOrder(bakeMuttonCommand2);
? ? ? ? girl.Notify();
? ? ? ? girl.SetOrder(bakeChiCommand);
? ? ? ? girl.Notify();? ?
? ? }
}