设计模式-委派模式
委派模式
委派模式(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 = "编程";
@Override
public void doing(String task) {
System.out.println(" 我是一名开发人员,擅长"+goodAt+"工作。");
}
}
3、创建负责平面设计的员工类
package com.jdwa.delegate;
public class DesignEmployee implements IEmployee {
protected String goodAt = "平面设计";
@Override
public 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());
}
@Override
public 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、类图

欢迎大家留言,以便于后面的人更快解决问题!另外亦欢迎大家可以关注我的微信公众号,方便利用零碎时间互相交流。共勉!
------愿来生只做陌上的看花人,无须入尘缘,仅行于陌上,看一川风花,无爱无伤-----
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2019-06-16 Spring学习笔记之Spring概述