设为首页 加入收藏

TOP

设计模式学习之——命令模式
2015-07-26 13:14:18 来源: 作者: 【 】 浏览:40
Tags:设计模式 习之 命令 模式

定义:


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


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();? ?
? ? }
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Xcode 7 中的 UI 测试功能 下一篇设计模式学习之职责链模式

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: