1700463367
设计模式之禅 15.2 命令模式的定义
1700463368
1700463369
命令模式是一个高内聚的模式,其定义为:Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations.(将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。)
1700463370
1700463371
命令模式的通用类图如图15-4所示。
1700463372
1700463373
1700463374
1700463375
1700463376
图15-4 命令模式的通用类图
1700463377
1700463378
在该类图中,我们看到三个角色:
1700463379
1700463380
❑Receive接收者角色
1700463381
1700463382
该角色就是干活的角色,命令传递到这里是应该被执行的,具体到我们上面的例子中就是Group的三个实现类。
1700463383
1700463384
❑Command命令角色
1700463385
1700463386
需要执行的所有命令都在这里声明。
1700463387
1700463388
❑Invoker调用者角色
1700463389
1700463390
接收到命令,并执行命令。在例子中,我(项目经理)就是这个角色。
1700463391
1700463392
命令模式比较简单,但是在项目中非常频繁地使用,因为它的封装性非常好,把请求方(Invoker)和执行方(Receiver)分开了,扩展性也有很好的保障,通用代码比较简单。我们先阅读一下Receiver类,如代码清单15-13所示。
1700463393
1700463394
代码清单15-13 通用Receiver类
1700463395
1700463396
public abstract class Receiver{
1700463397
1700463398
//抽象接收者,定义每个接收者都必须完成的业务
1700463399
1700463400
public abstract void doSomething();
1700463401
1700463402
}
1700463403
1700463404
很奇怪,为什么Receiver是一个抽象类?那是因为接收者可以有多个,有多个就需要定义一个所有特性的抽象集合——抽象的接收者,其具体的接收者如代码清单15-14所示。
1700463405
1700463406
代码清单15-14 具体的Receiver类
1700463407
1700463408
public class ConcreteReciver1 extends Receiver{
1700463409
1700463410
//每个接收者都必须处理一定的业务逻辑
1700463411
1700463412
public void doSomething(){
1700463413
1700463414
}
1700463415
[
上一页 ]
[ :1.700463366e+09 ]
[
下一页 ]