目前任职于搜狐~
分类: Java
2014-03-05 23:12:13
命令模式属于23种设计模式中行为模式中的一个,它也是一种简单实用非常普遍的设计模式。
首先看下GOF对命令模式的定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
命令模式主要应用于将行为调用者与实现者解耦。比如我们以前惯用的写代码的方式是LogicProcess logic = new LogicProcess(); 然后紧接着调用实现方法logic.process(),这种写法其实非常普遍,但这种写法把行为调用者和行为实现者耦合在了一起,一般情况下并没有什么问题的,但当调用逻辑比较复杂或则调用行为有多种实现时就非常不利于程序的扩展。
命令模式的适用场景描述:
(1)整个调用过程比较繁杂,或者存在多处这种调用。使用Command类对该调用加以封装,便于功能的再利用。
(2)调用前后需要对调用参数进行某些处理。
(3)调用前后需要进行某些额外处理,比如日志,缓存,记录历史操作等。
命令模式结构图如下:
命令模式的参与角色:
(1)抽象命令角色(Command):抽象命令,包含命令执行的抽象方法
(2)命令接收者(Receiver):命令接收者角色,它包含所有命令的具体行为实现方法。
(3)具体命令角色(ConcreteCommand):它包含一个命令接收者对象,并调用接收者的对象相应实现方法。
(4)命令调用者角色(Invoker):提供给客户端调用,接收客户端所传递的具体命令对象。
下面看具体代码实现:
1、第一个文件抽象命令角色:Command.java
点击(此处)折叠或打开
2、第二个文件命令接收者角色:Document.java
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开