设计模式--命令模式

Posted fating

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式--命令模式相关的知识,希望对你有一定的参考价值。

设计模式--命令模式

     初看命令模式,感觉设计的比较优雅,可扩展性比较好,慢慢琢磨其中用处,感觉设计的扩展性有太强了。如果在实际使用中,需要斟酌使用。

一、命令模式的基本概念:

    命令模式是一种高内聚的模式,其定义为:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或记录请求日志,可以提供命令的撤销和恢复功能。

    命令模式的角色:

    A、Command命令角色:需要执行的所有命令都在这里声明。注意这个可以进行扩展。

    B、 Receive接收者角色:该角色就是干活的角色,命令传递到这里是应该被执行的。

    C、Invoker调用者角色:接收到命令,并执行命令。

    D、Client,使用命令的执行的地方。

二、命令模式的核心例子:

    A、Command命令角色:

技术图片
 1 package comm.pattern.action.command;
 2 
 3 /**
 4  * 
 5  * @Title: ICommand.java
 6  * @Package: comm.pattern.action.command
 7  * @Description: 描述该文件做什么
 8  * @author yangzhancheng
 9  * @2020年2月29日:上午11:05:27
10  *
11  */
12 public interface ICommand {
13     //实际执行
14     void execute();
15 }
View Code

    A‘、Command命令实现者角色:

技术图片
 1 package comm.pattern.action.command;
 2 
 3 /**
 4  * 
 5  * @Title: ConcreteCommand.java
 6  * @Package: comm.pattern.action.command
 7  * @Description: 对命令的扩展,可以动态的扩充
 8  * @author yangzhancheng
 9  * @2020年2月29日:上午11:10:52
10  *
11  */
12 public class ConcreteCommand implements ICommand {
13 
14     private Receiver receiver;
15      
16     public ConcreteCommand(Receiver receive){
17         this.receiver = receive;
18     }
19     
20     
21     @Override
22     public void execute() {
23         this.receiver.action();
24     }
25 
26 }
View Code

    B、 Receive接收者角色:

技术图片
 1 package comm.pattern.action.command;
 2 /**
 3  * 
 4  * @Title: Receiver.java
 5  * @Package: comm.pattern.action.command
 6  * @Description: 具体干活
 7  * @author yangzhancheng
 8  * @2020年2月29日:上午11:12:19
 9  *
10  */
11 public class Receiver {
12 
13     public void action() {
14         System.out.println("执行请求!");
15     }
16 
17 }
View Code

   C、Invoker调用者角色:

技术图片
 1 /**
 2  * 
 3  * @Title: Invoker.java
 4  * @Package: comm.pattern.action.command
 5  * @Description: 调用者
 6  * @author yangzhancheng
 7  * @2020年2月29日:上午11:12:49
 8  *
 9  */
10 public class Invoker {
11 
12     private ICommand command;
13 
14     public void setCommand(ICommand command) {
15         this.command = command;
16     }
17 
18     public void executeCommand() {
19         command.execute();
20     }
21 }
View Code

    D、Client:

技术图片
 1 package comm.pattern.action.command;
 2 
 3 /**
 4  * 
 5  * @Title: Client.java
 6  * @Package: comm.pattern.action.command
 7  * @Description: 用户端
 8  * @author yangzhancheng
 9  * @2020年2月29日:上午11:15:02
10  *
11  */
12 public class Client {
13 
14     public static void main(String[] args) {
15         // TODO Auto-generated method stub
16         Receiver receiver = new Receiver();
17         ICommand command = new ConcreteCommand(receiver);
18         
19         Invoker nnvoker = new Invoker();
20         nnvoker.setCommand(command);
21         nnvoker.executeCommand();
22     }
23 
24 }
View Code

 

处理结果

技术图片
执行请求!
View Code

 

三、命令模式扩展例子:

四、总结:

 

以上是关于设计模式--命令模式的主要内容,如果未能解决你的问题,请参考以下文章

是否有在单个活动中处理多个片段的 Android 设计模式?

尝试使用片段保存夜间模式状态

Sublime text3最全快捷键清单

Sublime text3最全快捷键清单

csharp C#代码片段 - 使类成为Singleton模式。 (C#4.0+)https://heiswayi.github.io/2016/simple-singleton-pattern-us

java 查看寻呼机设计模式与片段。