设计模式 – 委派模式

news/2024/7/3 13:20:12

委派模式

委派模式不属于 GOF23 种设计模式中。委派模式(Delegate Pattern)的基本作用就是负责任务的调用和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理
的全权代理,但是代理模式注重过程,而委派模式注重结果。委派模式在 Spring 中应用非常多,大家常用的 DispatcherServlet 其实就是用到了委派模式。

例:老板(Boss)给项目经理(Leader)下达任务,项目经理会根据实际情况给每个员工派发工作任务,待员工把工作任务完成之后,再由项目经理汇报工作进度和结果给老板。我们用代码来模拟下这个业务场景,先来看一下类图:

在这里插入图片描述

public class Boss {
    public void command(String commond, Leader leader) {
        leader.doing(commond);
    }
}

public interface Employee {
    void doing(String command);
}

public class JavaEmployee implements Employee {
    @Override
    public void doing(String command) {
        System.out.println("我是后端程序员,执行 " + command + "开发任务");
    }
}

public class WebEmployee implements Employee {
    @Override
    public void doing(String command) {
        System.out.println("我是前端程序员,执行 " + command + "开发任务");
    }
}


public class Leader {
    private Map<String, Employee> register = new HashMap<>();
    public Leader() {
        register.put("前端", new WebEmployee());
        register.put("后端", new JavaEmployee());
    }
    public void doing(String command) {
        register.get(command).doing(command);
    }
}

public class DelegateTest {
    public static void main(String[] args) {
        Leader leader = new Leader();
        Boss boss = new Boss();
        boss.command("前端", leader);
        boss.command("后端", leader);
    }
}

在这里插入图片描述


http://www.niftyadmin.cn/n/4556703.html

相关文章

谁帮我弄个C++的小问题啊 高手来啊

"; cin>>more; } else { cout<<"/n/n请输入华氏度&#xff1a;"; cin<<user; cout<<"/n华氏度是&#xff1a;"<<user<<" /n华氏度是&#xff1a;"<<user/5*932; cout<<"想继续转换请…

设计模式 – 策略模式

策略模式 策略模式&#xff08;Strategy Pattern&#xff09;是指定义了算法家族、分别封装起来&#xff0c;让它们之间可以互 相替换&#xff0c;此模式让算法的变化不会影响到使用算法的用户。 使用场景 1、假如系统中有很多类&#xff0c;而他们的区别仅仅在于他们的行为…

文件默认权限umask掩码

umask命令 作用&#xff1a;用于显示、设置文件的缺省权限 格式&#xff1a;umask [-S]  -S表示以rwx形式显示新建文件缺省权限 系统的默认掩码是0022 文件创建时的默认权限 0666 - umask 目录创建时的默认权限 0777 - umask 所以创建文件的权限是 0666 - 0022 0644   …

谢谢啦~ 哪个高手帮我用C++解决个小问题啊

0)/*利用辗除法 y)<<endl;} y)<<endl; cout<<"他们的最小公倍数为: "<<Gbs(x y; cout<<"输入要求的两个数&#xff1a;"&#xff1b; cin>>x>>; cout<<"他们的最大公约数为: "<<Gcd(x b)…

设计模式实战,工厂+策略+单例 解决 if else 过多问题

场景 在支付选择中&#xff0c;可以选择京东白条、支付宝、微信、银联支付等。 public void payment(String payType) {if (payType.equals("JD")) {//京东支付} else if (payType.equals("Alibaba")) {//支付宝支付} else if (payType.equals("Tece…

学好C语言要注意哪些啊

C语言学得很浅 如果你是计算机专业的C语言学习 高校中的C语言开课初衷也是为了让学生更快的熟悉计算机软件中最底层的思想 个人感觉大学中的C语言 文件操作当年就被我老师忽略掉 学完指针和结构体之后应该就不会再讲了 我建议你首先学习C语言的编程思想 如果你所在为一所普通高…

设计模式 – 模板设计模式

模板设计模式 模板方法模式&#xff08;Template Method Pattern&#xff09;&#xff0c;又叫模板模式(Template Pattern)&#xff0c;在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。 该模式的主…

关于C语言initgraph图象函数

参考资料&#xff1a;http://course.cug.edu.cn/cugFirst/Adv_program/C_ziliao/ctuxin1.htm 答案补充 是的 若没有驱动程序 当程序进行到intitgraph()语句时 在编译和链接时并没有将相应的驱动程序(*.BGI)装入到执行程序 都这个年代了 现在根本就不用 还用它编过几个挺成样的软…