标签:pre err 拓展 命令模式 oid 求和 直接 main 日常生活
一个比较简单的设计模式,主要有三种角色,请求者,中间者,接收者。将方法的请求和执行分隔开,两者之间通过中间对象来调用,为了方便拓展,需要将中间者抽象。
请求者类
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(); } }
总结:请求者调用接收者的方法的时候不直接使用接收者对象,而是将自己的命令传递给命令传递者,这算是“黑盒”的一种改进,解除了请求者和接收者之间的耦合。坏处则是 如果有新的一个接收者,那么必须也要新建一个对应的具体命令类来实现调用。日常生活中可见的这种类型就是学校,如果学校多了一个班级的学生(接收者),校长(请求者)也无需直接管理,直接找一个新的老师来进行管理(新建命令类),校长从头到位都不用和学生接触。
标签:pre err 拓展 命令模式 oid 求和 直接 main 日常生活
原文地址:https://www.cnblogs.com/Vinlen/p/12784399.html