比如去路边的烧烤摊,没有服务员。那么顾客和老板直接交互,一个是行为请求者,一个是行为实现者,二者紧耦合。但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。就好比老板直接记录每个客户的信息,还要烤肉,老板可能记不得。
解决方法:
将一组行为抽象为对象,可以实现二者之间的松耦合。就比如将烤羊肉和烤鸡翅命令抽象为对象。那么服务员只管对抽象的命名发号施令即可。

package DesignPattern;public class CommandPattern {public static void main(String[] args) {//行为实现者Barbecuer boy=new Barbecuer();//命令,也就是行为请求者Command bakemucom=new BakeMUttonCom(boy);Command bakechicom=new BakeChickenCom(boy);//增加了侍者,侍者可以直接进行命令的选择。Waitess girl =new Waitess();girl.setCommand(bakechicom);girl.Notify();girl.setCommand(bakemucom);girl.Notify();}
}
class  Barbecuer{public  void Bakemutton(){System.out.println("bake-mutton");}public  void Bakechicken(){System.out.println("bake-chicken");}
}abstract class Command{//抽象命令protected Barbecuer receiver;public  Command(Barbecuer receiver){this.receiver=receiver;}abstract public void ExcuteCommand();
}
class BakeMUttonCom extends Command{public BakeMUttonCom(Barbecuer receiver) {super(receiver);}@Overridepublic void ExcuteCommand() {receiver.Bakemutton();}
}
class BakeChickenCom extends Command{//具体命令public BakeChickenCom(Barbecuer receiver) {super(receiver);}@Overridepublic void ExcuteCommand() {receiver.Bakechicken();}
}
class Waitess{private  Command command;public void setCommand(Command command) {this.command = command;}public void Notify(){command.ExcuteCommand();}
}

参考<大话设计模式>

设计模式——命令模式(Command Pattern)相关推荐

  1. 设计模式:命令模式(Command Pattern)

    命令模式(Command Pattern): 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接受者是谁,也不知道请求的操作是哪个. 我们只需在程序运行时指定具体的请求接受者即可,此时 ...

  2. 设计模式 - 命令模式(command pattern) 撤销(undo) 具体解释

    命令模式(command pattern) 撤销(undo) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.cs ...

  3. 解读设计模式----命令模式(Command Pattern)

    ***本文与作者原文有一定的偏差,其中加入了一部分是个人看法,详细请查看作者原文.*** 原文连接http://www.dofactory.com/Patterns/PatternCommand.as ...

  4. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

  5. 设计模式系列3-----C++实现命令模式(Command Pattern)

    什么是命令模式? GoF的书的定义为:"Command pattern encapsulate request as an object, thereby letting you param ...

  6. C++设计模式--命令模式(Command)

    概述 命令模式的结构很简单,但是对于消除代码间的耦合却有着重要的影响.命令模式就是一个函数对象:一个作为对象的函数.通过将函数封装为对象,就能够以参数的形式将其传递给其他函数或者对象,告诉它们在旅行请 ...

  7. 32命令模式(Command Pattern)

    耦合与变化:     耦合是软件不能抵御变化灾难的根本性原因.不仅实体对象与实体对象之间存在耦合关系,实体对象与行为操作之间也存在耦合关系.                               ...

  8. 命令模式(Command pattern)及代码实现

    模式定义: 将客户端的请求封装成一个对象(这个对象就是 命令对象),使请求的发送者 和请求的接收者 进行 责任分离解耦, 这样 两者只通过 命令进行交互;发送者 不关心 请求的具体实现细节, 接收者 ...

  9. Java设计模式-命令模式Command

    定义 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化.用于"行为请求者"与"行为实现者"解耦,可实现二者之间的松耦合,以便适应变化.分离 ...

  10. 趣谈设计模式 | 命令模式(Command):将命令封装为对象

    文章目录 案例:智能遥控 命令模式 应用场景 队列请求 日志系统 总结 完整代码与文档 命令模式的应用场景较少,且不易理解,因此我也不好举例,所以下面的描述可能会存在一些问题,请见谅 案例:智能遥控 ...

最新文章

  1. CSV XLS文件区别
  2. 使用ip6tables禁用ipv6
  3. c# DllImport 错误处理的不足及解决办法
  4. 不同的二叉搜索树 IIPython解法
  5. linux 22.3 终端,Linux系统服务Day.22
  6. python爬新闻并保存csv_用python爬取内容怎么存入 csv 文件中
  7. Bootstrap——可拖动模态框(Model)
  8. matlab unicode,MATLAB中的汉字编码
  9. [译]响应式编程笔记一:响应式总览
  10. 联想Y580黑苹果安装
  11. Ubuntu系统安装ghostscript seq2logo
  12. Eclipse快捷键、Debug调试
  13. MQTT代理服务器的选择
  14. SaaS 系统的应用与架构
  15. 右键添加打开方式 windows
  16. 美国云主机如何保证数据安全?
  17. L1、L2、smooth L1三类损失函数
  18. 什么时候会触发Full GC
  19. 切比雪夫------切比雪夫不等式
  20. LeetCodeOJ.Number of Digit One

热门文章

  1. L-SNET:从区域定位到尺度不变的医学图像分割
  2. C#和F#默认接口方法更新
  3. Nginx HTTP负载均衡和反向代理配置
  4. 《JUnit实战(第2版)》—第2章2.4节用Suite来组合测试
  5. 洛谷——1115 最大子段和(区间DP)
  6. Android 导入项目时出现错误的解决方法(红色感叹号)
  7. 北航云计算公开课 01 Introduction to Cloud Computing
  8. matlab7.1(ERROR STARTING DESKTOP)解决
  9. 为特定用户创建监牢 chroot
  10. 一起谈.NET技术,微软PDC10:大牛谈ASP.NET和C#技术走向