设计模式-委派模式

news/2024/10/4 5:26:38
委派模式

委派模式(Delegate Pattern)又叫委托模式,它允许对象组合实现与继承相同的代码重用。它的基本作用就是负责任务的调用与分配任务,是一种特殊的静态代理,可以理解为全权代理。但是,代理过程注重过程,而委派模式注重结果。

角色:

抽象任务角色(Task):定义一个抽象接口,他有若干实现类。
委派者角色(Delegate):负责在各个具体角色实例之间做出决策,判断并调用具体实现的方法;
具体任务角色(Concrete):真正执行任务的角色

举例

老板Boss给项目经理Leader下达任务,项目经理根据实际情况给每个员工Employee派发工作任务,待员工把工作任务完成之后,再由项目经理汇报工作进度和结果给老板。

1、创建员工接口类:

package com.jdwa.delegate;public interface IEmployee {default void init(){System.out.println("        +++++开始任务++++++");}void doing(String task);
}

2、创建负责编程的员工类

package com.jdwa.delegate;public class ProgramEmployee implements IEmployee {protected String goodAt = "编程";@Overridepublic void doing(String task) {System.out.println("        我是一名开发人员,擅长"+goodAt+"工作。");}
}

3、创建负责平面设计的员工类

package com.jdwa.delegate;public class DesignEmployee implements IEmployee {protected String goodAt = "平面设计";@Overridepublic void doing(String task) {System.out.println("        我是一名平面设计人员,擅长"+goodAt+"工作。");}
}

4、创建项目经理

package com.jdwa.delegate;import java.util.HashMap;
import java.util.Map;public class DeptLeader implements IEmployee {private Map<String,IEmployee> employees = new HashMap<>();public DeptLeader(){employees.put("爬虫",new ProgramEmployee());employees.put("海报图",new DesignEmployee());}@Overridepublic void doing(String task) {System.out.println("    ===部门经理分发任务===");if (!employees.containsKey(task)){System.out.println("    任务"+task+"超出我的能力范围");return;}employees.get(task).init();employees.get(task).doing(task);}
}

5、创建老板类

package com.jdwa.delegate;public class Boss {public void command(String task,DeptLeader leader){System.out.println("===老板开始部署任务===");leader.doing(task);}
}

6、创建客户端用于测试代码

package com.jdwa.delegate;public class Client {public static void main(String[] args) {Boss boss = new Boss();DeptLeader leader = new DeptLeader();boss.command("海报图",leader);boss.command("爬虫",leader);boss.command("卖手机",leader);}
}

7、运行结果

===老板开始部署任务======部门经理分发任务===+++++开始任务++++++我是一名平面设计人员,擅长平面设计工作。
===老板开始部署任务======部门经理分发任务===+++++开始任务++++++我是一名开发人员,擅长编程工作。
===老板开始部署任务======部门经理分发任务===任务卖手机超出我的能力范围

8、类图

类图1.png

欢迎大家留言,以便于后面的人更快解决问题!另外亦欢迎大家可以关注我的微信公众号,方便利用零碎时间互相交流。共勉!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/44369.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

开发者选项-显示指针位置

开发者选项-指针位置应用设置部分搜索对应字串,在SettingsLib中搜到“指针位置”字串,其id名为pointer_location根据id在Settings中搜索布局相关(res/xml/development_settings.xml)查看其key(pointer_location)相关代码显然,在点击指针位置的控件时,在设置中会对应在S…

BootAnimation简析

BootAnimation简析BootAnimation是开机动画,其对应源码在frameworks\base\cmds\bootanimation(这里使用android12的代码查看,不同版本代码有差异,但大体逻辑一般都差别不大),其编译产物是个二进制可执行文件bootanimation,在开机过程中会执行播放开机动画,其目录中有个…

Unreal RecastNavigation 开源项目详解

Recastnavigation是一个游戏AI导航库,像Unity,UE引擎中都集成了这个开源项目, HALO中使用的也是这个开源库。导航最重要的就是为NPC寻路,以及其他的寻路需求。0 前言 Recastnavigation是一个游戏AI导航库,像Unity,UE引擎中都集成了这个开源项目, HALO中使用的也是这个开…

编写单个函数的ROP链

什么是ROP链 在我初识栈溢出那篇博客已经详细的讲了函数的调用过程(基于X86框架),不了解的可以看一下,没有这个理论基础,是学不好ROP的。现在我们说一下什么是ROP。 ROP链就是通过返回地址的修改来完成的编程,调用特定的函数的一种编程模式。我们可以联想一下你做的最简单…

计组要我命第五天中

要命计组(6) 开始时间 2024-06-1612:38:07 结束时间 2024-06-16 15:01:11 前言:吃完饭,睡会觉,继续计组[fine]. 总结:中场休息!

聊聊育种大模型

从去年年末开始到现在,大语言模型(Large Language Models,LLM)热度依旧不减。 有实力烧钱的机构在训练自己的LLM,没实力想凑热闹的更聚焦在垂直领域的应用上,绝大多数企业属于后者。 每个行业多多少都有人在做基础模型的微调和打造私有知识库,以期不被时代抛弃。 医疗、…

MyBatis 的缓存机制

1. MyBatis 的缓存机制 @目录1. MyBatis 的缓存机制2. 准备工作3. MyBatis 的一级缓存3.1 一级缓存失效情况/条件4. MyBatis 的二级缓存5. MyBatis 集成 EhCache 第三方缓存6. 总结:7. 最后:缓存(Cache) 缓存的作用:通过减少 IO 的方式,来提高程序的执行效率 。 MyBatis …

KAN:使用 Microsoft 的 KubeAI Application Nucleus简化边缘 AI

我们需要的是在 Kubernetes 上构建和管理边缘机器学习应用程序的一致方法,一种可以加快开发和交付速度的方法。这就是 KAN 的作用,即 KubeAI Application Nexus。正如介绍性博客文章所指出的那样,这个名字来自一个普通话动词,翻译为“观看”或“看”。KAN 是一个开源项目,…