设计模式总结篇系列:命令模式(Command)

在程序设计中,经常会遇到一个对象需要调用另外一个对象的某个方法以达到某种目的,在此场景中,存在两个角色:请求发出者和请求接收者。发出者发出请求,接收者接收请求并进行相应处理。有时候,当需要对请求发出者和接收者进行解耦,即发出者中不能含有接收者的引用,如请求需要进行排队操作,或可能需要对请求进行取消操作等,在此类场景中,请求发出者此时若还是直接操作接收者,将无法满足此类需求。此时,我们可以使用命令模式。

在命令模式中,当一个对象请求另一个对象其调用方法时,不和被请求的对象直接打交道,而是把这种请求封装到一个命令的对象中,封装的手段是将请求封装在命令对象的一个方法中。命令模式的核心就是使用命令对象来封装方法调用。既请求者的请求,接受者调用方法。

下面以常见的首长对官兵下达命令为例:

1.定义官兵类:

设计模式总结篇系列:命令模式(Command)
 1 class Soldier {
 2     
 3     public void zip(){
 4         System.out.println("开始拉练30公里...");
 5     }
 6     
 7     public void stand(){
 8         System.out.println("开始站军姿2小时...");
 9     }
10 
11 }
设计模式总结篇系列:命令模式(Command)

2.定义命令类:

设计模式总结篇系列:命令模式(Command)
 1 class Command{
 2     
 3     private Soldier solider;
 4     
 5     public Command(Soldier solider){
 6         this.solider = solider;
 7     }
 8     
 9     public void stand(){
10         solider.stand();
11     }
12     
13     public void zip(){
14         solider.zip();
15     }
16     
17 }
设计模式总结篇系列:命令模式(Command)

3.定义首长类:

设计模式总结篇系列:命令模式(Command)
 1 class Chief {
 2 
 3     private Command command;
 4 
 5     public Chief(Command command) {
 6         this.command = command;
 7     }
 8 
 9     public void startStand() {
10         command.stand();
11     }
12 
13     public void startZip() {
14         command.zip();
15     }
16 }
设计模式总结篇系列:命令模式(Command)

4.测试:

设计模式总结篇系列:命令模式(Command)
 1 public class CommandTest {
 2 
 3     public static void main(String[] args) {
 4         Soldier soldier = new Soldier();
 5         Command command = new Command(soldier);
 6         Chief chief = new Chief(command);
 7         chief.startStand();
 8     }
 9 
10 }
设计模式总结篇系列:命令模式(Command)

 

---------------------------------------------------------------------------------
笔者水平有限,若有错漏,欢迎指正,如果转载以及CV操作,请务必注明出处,谢谢!
分类: 设计模式

本文转自Windstep博客园博客,原文链接:http://www.cnblogs.com/lwbqqyumidi/p/3803022.html,如需转载请自行联系原作者
上一篇:ehcache 与spring相结合超时自动刷新缓存的框架搭建


下一篇:安全专家深度解析,一觉醒来文件加密被逼万元赎金,怎么破?