? 开关和电灯之间并不存在直接耦合关系,在命令模式中,发送者与接收者之间引入了新的命令对象,将发送者的请求封装在命令对象中,再通过命令对象来调用接收者的方法。
命令模式的主要缺点如下:
使用命令模式可能会导致某些系统有过多的具体命令类。
因为针对每一个对请求接收者的调用操作都需要设计一个具体命令类。
因此在某些系统中可能需要提供大量具体命令类,
这将影响命令模式的使用。
使用场景
1.系统需要将请求调用者和请求接收者解耦,
使得调用者和接收者不直接交互。
请求调用者无须指定接收者的存在,也无须指定接收者是谁,接收者也无须关心合适被调用。
2.系统需要在不同的时间指定请求,将请求排队和执行请求。
一个命令的对象和请求的初始调用者可以有不同的生命期,换言之,最初的请求发出者
可能已经不在了,而命令对象本身仍然是活动的,可以通过该命令对象去调用
3.系统需要支持命令的撤销和恢复操作。
在上述代码中,功能键类FunctionButton充当请求的发送者,帮助文档处理类HelpHandler
充当请求的接收者,在发送者FunctionButton的onClick方法中将调用接收者HelpHandler
的display()方法,显然,如果使用上述代码,将给系统带来如下几个问题:
1.由于请求发送者和请求接收者之间存在方法的直接调用,耦合度很高,更换请求接收者
必须修改发送者的源代码。如果需要将请求接收者HelpHandler改为WindowsHandler,则
需要修改FunctionButton的源代码,违背了开闭原则。
?