chapter 6 --命令模式
封装调用
1. 命令模式可将“动作的请求者”从“动作的执行者”对象中解耦。
命令模式:
将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
Structure
- Client: 客户负责创建一个ConcreteCommand,并设置其接收者。
- ConcreteCommand: 定义了动作和接收者之间的绑定关系。调用者只要调用execute()就可以发出请求,然后由ConcreteCommand调用接收者的一个或多个动作。这个execute()方法会调用接收者的动作,以满足请求。
- Receiver: 接收者知道如何进行必要的工作,实现这个请求。任何类都可以当做接收者。
- Command: 为所有命令声明了一个接口。调用命名对象的execute()方法,就可以让接收者进行相关的动作。这个接口也具备一个undo()方法。
- Invoker: 这个调用者持有一个命令对象,并在某个时间点调用命令对象的execute()方法,将请求付诸实行。
空对象
当你不想返回一个有意义的对象时,空对象就很有用。客户也可以将处理null的责任转移给空对象。当调用空对象的execute()的方法时,这种对象什么事情都不做。例如,代码中的NoCommand对象是一个空对象(null object)。有时候,空对象本身也被视为一种设计模式。
2. 利用Command接口,每个动作都被实现成一个简单的命令对象。命令对象持有对一个厂商类的实例的引用,并实现了一个execute()方法。这个方法会调用厂商类实例的一个或多个方法,完成特定的行为。
3. 可以使用一个堆栈记录操作过程的每一个命令。然后,不管什么时候按下了撤销按钮,你都可以从堆栈中取出最上层的命令,然后调用它的undo()方法。从而实现多层次的撤销操作。
4. 命令可以将运算块打包(一个接收者和一组动作),然后将它传来传去,就像是一般的对象一样。它甚至可以在不同的线程中被调用。我们可以利用这样的特性衍生一些应用:日程安排(Scheduler)、线程池、工作队列等。
5. 工作队列:你在某一端添加命令,然后另一端则是线程。线程从队列中取出一个命令,调用它的execute()方法,等待这个调用完成后,然后将此命令对象丢弃,再取出下一个命令。这样,工作队列类与进行计算的对象之间完全是解耦的。工作队列对象不在乎到底做什么,它们只知道取出命令对象,然后调用其execute()方法。
6. 命令模式也可用于日志请求,当执行命令时,将历史记录存储在磁盘中。一旦系统死机,就可以将命令对象重新加载,并成批地依次调用这些对象的execute()方法。
本章小结:
- 命令模式将发出请求的对象和执行请求的对象解耦。
- 在被解耦的两者之间是通过命令对象进行沟通的。命令对象封装了接收者和一个或一组动作。
- 调用者通过调用命令对象的execute()发出请求,这会使得接收者的动作被调用。
- 调用者可以接受命令当做参数,甚至在运行时动态地进行。
- 命令可以支持撤销,做法是实现一个undo()方法来回倒execute()被执行前的状态。
- 宏命令是命令的一种简单的延伸(使用数组存储一组命令),允许调用多个命令。宏方法也可以支持撤销。
- 实际操作时,很常见使用“聪明”命令对象,也就是直接实现了请求,而不是将工作委托给接收者。
- 命令也可以用来实现日志和事务系统。
分享到:
相关推荐
《Head First 设计模式》是IT领域内广受赞誉的一本书,主要针对C#和Java开发者,深入浅出地介绍了设计模式这一核心编程概念。设计模式是软件开发中经过实践验证的解决方案模板,用于解决常见问题,提升代码的可读性...
《Headfirst设计模式》是一本深受开发者欢迎的设计模式学习书籍,尤其对于初学者而言,其独特的教学方式使得复杂的概念变得易于理解。这本书以其高清的中文版PDF格式提供,结合书中源码,为读者提供了深入实践的可能...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、Template Method、iterator、Composite、State、proxy。最后三章比较...
总的来说,这个压缩包包含的资源可以帮助你深入理解设计模式,通过《HeadFirst设计模式》和《HeadFirst in Java》的源码,你可以学习到如何在实际项目中应用这些模式。而UML类图则提供了直观的视角,便于你把握设计...
《HeadFirst设计模式JAVA版源码》是一份深入学习设计模式的重要资源,它基于流行的编程语言Java,旨在帮助开发者理解并应用设计模式于实际项目中。设计模式是软件工程中的重要概念,它代表了在特定场景下解决问题的...
《Head-First设计模式》是设计模式领域内一本广受欢迎的入门书籍,以其独特的视觉呈现方式和易懂的讲解风格,让初学者也能快速理解并掌握设计模式的精髓。设计模式是软件工程中的一种最佳实践,是解决常见编程问题的...
《Head First 设计模式》是一本深受欢迎的设计模式书籍,由Eric Freeman、Elisabeth Robson、Bert Bates和Kathy Sierra合著。这本书以其独特的视觉呈现方式和易理解的教学方法,深受程序员们的喜爱,尤其是那些希望...
《Head First设计模式》是一本深受开发者喜爱的设计模式入门书籍,其官方源码库"Head-First-Design-Patterns-master.zip"包含了书中所讲解的各种设计模式的实际代码示例,旨在帮助读者更深入地理解并应用这些模式。...
《Head First设计模式》是一本深受开发者欢迎的设计模式教程,以其独特的视觉呈现方式和易于理解的语言,让初学者也能快速掌握设计模式的核心概念。这本书深入浅出地介绍了23种GOF(GoF,Gamma、Erich、Johnson、...
《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...
《Head First设计模式》是一本深受开发者喜爱的设计模式学习书籍,它以易懂、生动的方式讲解了23种经典的设计模式。源代码是书中理论知识的实践体现,可以帮助读者更深入地理解并应用这些模式。这里我们将围绕这些...
《Head First 设计模式》的英文版是一本面向初学者的设计模式入门书籍,它以幽默风趣的文风,深入浅出地介绍了软件设计中经常使用的设计模式。设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的...
在Head First 设计模式这本书中,第六章详细介绍了如何在C++中实现命令模式。 命令模式的核心思想是将"做什么"与"谁去做"分离开来。命令对象持有接收者并调用其特定方法,而调用者只关心命令对象,而不关心具体的...
《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...
《HeadFirst设计模式》是一本深受开发者喜爱的经典书籍,它以独特的方式深入浅出地讲解了设计模式这一重要编程概念。设计模式是软件工程中经过实践验证的、解决常见问题的有效解决方案,对于提升代码可读性、可维护...
《HeadFirst设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...
根据提供的文件信息,“Head First设计模式中文版带书签”主要涉及的是软件工程中的设计模式这一核心主题。设计模式是在软件开发过程中针对特定问题而形成的最佳实践或解决方案模板,能够帮助开发者解决常见的设计...
《Head First设计模式》是一本深受开发者欢迎的设计模式学习书籍,以其独特的教学方式,通过丰富的图解和幽默的语言,帮助读者深入理解设计模式的核心概念。这本书的官方源码提供了书中所讲解的每个设计模式的实际...
《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第 11章陆续介绍的设计 5b4 式为Strategy、Observer、Decorator、...