命令模式

命令模式中,Receiver和Command是关键,Command最终是调用用Receiver的Action(Command对Receiver的回调(Callback)来让命令得以实现的)。

所以使用命令模式,必须实现Command和Receiver. (如果Command是“智能”的,Receiver的代码可以移动到Command中)

在一个系统有很多功能,并且几个功能可能会产生一个复杂的功能时,命令模式是一个很好待选模式,举个现实中的例子, 调用第三方的监控摄像头API实现一个服务程序,可以open和close摄像头。实际情况是open中或许还包含着

1 要添加字幕

2 打开摄像头的话筒

这两个可选的功能。如果把添加字幕和打开话筒也封装为2个Command,那么系统会更加灵活(同一厂家摄像头中也有不支持这两命令的摄像头)

总结:

命令模式封装了软件的“功能”(要实现的功能),相同的“功能”在不同的条件下(不同的厂商,不同的平台等),具体实现(代码)是不一样的,

与代理模式,门面模式相比,命令模式更灵活,因为可以把几个命令组合起来实现一个功能,并且可动态添加和移除。

如果同不的Command有互斥的,或者很多个命令组合起来才能实现某一个功能,那么还是用门面模式吧,太多的Command组合,会使人发晕的。

如果某个服务类的功能(方法)是固定的,用代理模式可能是更好的选择。

原文地址:https://www.cnblogs.com/Jiaojiawang/p/4198251.html