设计模式--命令模式
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 }
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 }
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 }
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 }
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 }
处理结果
执行请求!
三、命令模式扩展例子:
四、总结:
以上是关于设计模式--命令模式的主要内容,如果未能解决你的问题,请参考以下文章
是否有在单个活动中处理多个片段的 Android 设计模式?
csharp C#代码片段 - 使类成为Singleton模式。 (C#4.0+)https://heiswayi.github.io/2016/simple-singleton-pattern-us