设计模式(19)-命令模式
Command
思想:将一个动态的执行过程封装成一个对象,可以像处理数据来处理和管理这样的对象,在需要的时候激发该对象的方法就能执行被封装的执行过 程。
场景:该模式在很多时候非常有用,它使得我们对逻辑上已经激发的行为进行优化成为可能,我们不仅可以根据需要改变一组逻辑上以经济法的活动的 顺序,消冗余操作,撤销不必要的操作等。也可以把活动和操作视为资源一样来管理和重用。同时该模式也是许多事务处理机制的基础。
实现:实现很简单,只是定义一些能够通过指定接口被激发的对活动进行封装的类,然后我们按照需要管理这些类,并在需要的时候激发这些活动。您 还是应该更多地去体会,为什么他是事务处理机制的基础,当我们可以这样来管理一组活动的时候,可以对这些活动进行那些有趣的控制。
重构成本:高。
Command命令设计模式将一个请求封装成一个对象,从而使你可用不同的请求对客户进行操作。Command命令设计模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。每一个命令都是一个操作,命令请求发出请求要求执行一个操作;命令接受方收到请求,并执行操作。命令模式允许命令请求方和命令接收方独立开来,使得命令请求方不必 知道命令接收方的接口,更不必知道请求是怎么被接收,以及操作是否被执行,何时被执行,以及是怎么被执行的。
Command命令设计模式结构如下:
Command命令设计模式中5个角色:
(1).客户角色:创建了一个具体命令对象并确定其接收者。
(2).命令角色:声明了一个给所有具体命令类的抽象接口。这是一个抽象角色,通常由一个Java接口或java抽象类实现。
(3).具体命令角色:定义一个接受者和行为之间的弱耦合;实现execute方法,负责调用接收者的相应操作。execute方法通常叫做 执行方法。
(4).请求者(Invoke)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。
(5).接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。
Command命令设计模式例子代码如下:
1 | //请求者角色 |
Command命令设计模式的优缺点:
优点: 解耦了命令请求者和接受者之间联系。请求者调用一个命令,接受者接受请求并执行相应的动作,因为使用Command模式解耦,请求者无需知道接受者任何接口。
缺点: 造成出现过多的具体命令类。
JDK中命令模式的应用:
•java.lang.Runnable
•javax.swing.Action