美文网首页
设计模式-委派模式

设计模式-委派模式

作者: 东方欲晓_莫道君行早 | 来源:发表于2024-06-15 16:10 被阅读0次
    委派模式

    委派模式(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、类图

    类图1.png

    相关文章

      网友评论

          本文标题:设计模式-委派模式

          本文链接:https://www.haomeiwen.com/subject/oeypeltx.html