设计模式-命令模式
Posted vinlen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-命令模式相关的知识,希望对你有一定的参考价值。
一个比较简单的设计模式,主要有三种角色,请求者,中间者,接收者。将方法的请求和执行分隔开,两者之间通过中间对象来调用,为了方便拓展,需要将中间者抽象。
请求者类
public class Invoker { Command command; public Invoker(Command command) { this.command = command; } public void request(){ command.excute(); } }
命令抽象类(中间者抽象)
public interface Command { public void excute(); }
具体命令实现类
public class Command1 implements Command { ReceiverA receiverA; public Command1(ReceiverA receiverA) { this.receiverA = receiverA; } @Override public void excute() { receiverA.action(); } }
接收者
public class ReceiverA { public void action(){ System.out.println("执行动作"); } }
测试类
public class Client { public static void main(String[] args) { //接收者 ReceiverA receiverA = new ReceiverA(); //具体命令传递者 Command1 command1 = new Command1(receiverA); //请求者 Invoker invoker = new Invoker(command1); invoker.request(); //--------可以简化写成 new Invoker(new Command1(new ReceiverA())).request(); } }
总结:请求者调用接收者的方法的时候不直接使用接收者对象,而是将自己的命令传递给命令传递者,这算是“黑盒”的一种改进,解除了请求者和接收者之间的耦合。坏处则是 如果有新的一个接收者,那么必须也要新建一个对应的具体命令类来实现调用。日常生活中可见的这种类型就是学校,如果学校多了一个班级的学生(接收者),校长(请求者)也无需直接管理,直接找一个新的老师来进行管理(新建命令类),校长从头到位都不用和学生接触。
以上是关于设计模式-命令模式的主要内容,如果未能解决你的问题,请参考以下文章
是否有在单个活动中处理多个片段的 Android 设计模式?
csharp C#代码片段 - 使类成为Singleton模式。 (C#4.0+)https://heiswayi.github.io/2016/simple-singleton-pattern-us