java设计模式-命令模式(command)
2019-08-06 本文已影响54人
yiqiquhuxi
命令模式:属于行为型模式。
命令模式,将一个请求封装成一个对象,使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持撤销的操作。
UML图如下:
![](https://img.haomeiwen.com/i2546594/ba1ed5d6dd0a4503.jpg)
这里面有几个对象进行说明:
Client:客户端。
Invoker:请求者,用户请求不同的命令。
Command:抽象命令类。
ConcreteCommand:具体的命令类。
Receiver:命令的接收者,也是命令的具体实现。
在这里举个例子:
1:餐馆点餐:客户(Client)进行点餐,把需要的菜品告诉服务员(Invoker),服务员把具体的菜 品记录下来(Command),告诉后台厨师(Receiver)进行制作。
2:小明(Client)拿起遥控器(Invoker),点击开机按钮(Command),电视机(Receiver)接受 命令被打开。
java实现简单命令模式:
命令接受者(Receiver)
![](https://img.haomeiwen.com/i2546594/43f3d0a059f4e990.png)
抽象命令接口(Comand)
![](https://img.haomeiwen.com/i2546594/953b9eb812264be4.png)
具体命令类:(Concrete)
![](https://img.haomeiwen.com/i2546594/fc70fa551b017f58.png)
发起者:(Invoker)
![](https://img.haomeiwen.com/i2546594/5fdf7a4a23df52c1.png)
客户端(Client):
![](https://img.haomeiwen.com/i2546594/b156e62e7e8bcf28.png)
上面列子:客户端,命令,和命令操作者实现了解耦,各个命令相互不影响。
命令模式优点:
1:命令被单一化,扩展起来方便,符合单一职责原则。
2:客户端和命令具体执行被解耦,降低了系统耦合性。
以上面提到的列子2为demo(小明打开遥控器)
![](https://img.haomeiwen.com/i2546594/1f445d5225cbd470.jpg)
代码如下:
电视机:(Receiver)
![](https://img.haomeiwen.com/i2546594/fd90c397f8e012aa.png)
命令接口:(Command)
![](https://img.haomeiwen.com/i2546594/075242632aa2ac4d.png)
换台命令:(Concrete)
![](https://img.haomeiwen.com/i2546594/a38bb9b6146a537f.png)
播放命令:(Concrete)
![](https://img.haomeiwen.com/i2546594/f5f11d99dda38571.png)
加音量命令:(Concrete)
![](https://img.haomeiwen.com/i2546594/3b9c607e11caff9a.png)
遥控器:(Invoker)
![](https://img.haomeiwen.com/i2546594/502869cbfd8372a4.jpg)
客户端:(Client)
![](https://img.haomeiwen.com/i2546594/c4e4493b02c0fb62.jpg)
输出结果:
![](https://img.haomeiwen.com/i2546594/2288325caaf90ace.png)
JDK中命令模式的应用:
java.lang.Runnable