委派任务丨设计模式之间的区别与联系(设计模式区分)

游戏问答 2023-02-16 12:34:21

指派商业模式(Delegate Pattern)又叫委派商业模式,是一类面向第一类的程序语言,容许第一类女团同时实现与 承继完全相同的标识符宠信。它的基本上促进作用是负责管理各项任务的初始化和阳州,是一类特定的动态代理,能理 解为代理代理,但代理商业模式著重操作过程,而指派商业模式著重结论。指派商业模式归属于犯罪行为型商业模式,不归属于 GOF 23 种程序语言中。

浅显点讲是有三个第一类参予(三个第一类协同)处置同三个允诺,拒绝接受允诺的第一类将允诺委派给另一个第一类来处置。

指派商业模式的UML类图

委派任务丨设计模式之间的区别与联系(设计模式区分)_https://www.ybmzs.com_游戏问答_第1张

能辨认出和动态代理类的类图那样,因此也叫作特定的动态代理,惟一的差别是着眼点不那样,三个是操作过程三个是结论

标识符如下表所示:

public interface Task { void doSomething(); } 拷贝标识符public class ConcreteA implements Task{ @Override public void doSomething() { System.out.println("ConcreteA doSomething"); } } 拷贝标识符public class ConcreteB implements Task{ @Override public void doSomething() { System.out.println("ConcreteB doSomething"); } } 拷贝标识符public class Delegate implements Task{ private Task task = new ConcreteA(); @Override public void doSomething() { task.doSomething(); } public void toA(){ task = new ConcreteA(); } public void toB(){ task =new ConcreteB(); } } 拷贝标识符public class Test { public static void main(String[] args){ Delegatedelegate = new Delegate(); delegate.doSomething(); delegate.toB(); delegate.doSomething(); } } 拷贝标识符

标识符示例

举个典型的例子:路由,我们知道路由的促进作用是在不同网段间转发数据的,当路由器拒绝接受到三个消息的时候她会根据消息头部中的信息找出对应网段再根据自己的路由表找到对应的机器再转发给实际接收者,这里面路由是三个委派者角色而注册到这个路由中的计算机则是实际执行各项任务的角色(实际接收消息的角色)

消息体:@Data public class Message { private String content; private String targetIp; private String sourceIp; public Message(String content, String targetIp, String sourceIp) { this.content = content; this.targetIp = targetIp; this.sourceIp = sourceIp; } } 拷贝标识符首先抽象出各项任务的角色public interface IMessage { void receiveMessage(Message message); } 拷贝标识符具体各项任务同时实现第一类@Data public class ComputerA implements IMessage{ private String ip = "192.168.88.7"; @Override public void receiveMessage(Message message) { System.out.println("ComputerA处置消息:" + message.getContent()); } } 拷贝标识符 @Data public class ComputerB implements IMessage{ private String ip = "192.168.88.8"; @Override public void receiveMessage(Message message) { System.out.println("ComputerB处置消息:" + message.getContent()); } 拷贝标识符 @Data public class ComputerC implements IMessage{ private String ip = "192.168.88.9"; @Override public void receiveMessage(Message message) { System.out.println("Computerc处置消息:" + message.getContent()); } } 拷贝标识符委派者角色public class Route implements IMessage{ private final Map<String, IMessage> routeTable= new HashMap<>(); public Route(){ ComputerA computerA = new ComputerA(); ComputerB computerB = new ComputerB(); ComputerC computerC = new ComputerC(); routeTable.put(computerA.getIp(),computerA); routeTable.put(computerB.getIp(),computerB); routeTable.put(computerC.getIp(),computerC); } @Override public void receiveMessage(Message message) { if(routeTable.containsKey(message.getTargetIp())){ routeTable.get(message.getTargetIp()).receiveMessage(message); } } } 拷贝标识符这里用了策略商业模式配合使用客户端初始化public class Test { public static void main(String[] args) { Message message = new Message("hello","192.168.88.7","192.168.88.100"); Route route = new Route(); route.receiveMessage(message); } } 拷贝标识符打印结论UML类图

源码中的应用

jvm在加载类的时候使用的是双亲指派,是在加载类之前会先找父类,如果存在父类则继续找父类的父类知道找到最顶级的父类然后加载返回即可,如果没有父类则加载类然后返回,具体源码我们能看一下 ClassLoader这个类:

委派任务丨设计模式之间的区别与联系(设计模式区分)_https://www.ybmzs.com_游戏问答_第2张
委派任务丨设计模式之间的区别与联系(设计模式区分)_https://www.ybmzs.com_游戏问答_第3张

指派商业模式优缺点

优点:

通过各项任务指派能够将三个大型的各项任务细化。将应用相关的内容与框架完全分离开避免过多的子类以及子类与父类的耦合通过委派传递消息机制同时实现分层解耦

缺点:

各项任务指派方式需要根据各项任务的复杂程度进行不同的改变,在各项任务比较复杂的情况下可能需要进行多 重指派,容易造成紊乱。

原文链接:

https://juejin.cn/post/7173950620238348302

发表回复