委派模式

1.定义

委派模式又叫委托模式,是一种面向对象的设计模式,允许对象组合实现与继承相同的代码重用,它的作用就是负责任务的调用和分配。是一种特殊的静态代理,可以理解为全权代理,但是代理模式注重过程,而委派模式注重结果,委派模式属于行为型模式,不属于GOF23种设计模式。

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

每个员工有自己的岗位,每个岗位做对应的事情,然后老板让部门领导分配任务下去了

/**
 * create by yufeng on 2021/7/5 14:12
 */
public interface IEmployee {
    void coding(String task);
}

/**
 * create by yufeng on 2021/7/5 14:13
 */
public class EmployeeA implements IEmployee {
    private String goodAt = "写java bug";

    public void coding(String task) {
        System.out.println("我是员工A 我擅长" + goodAt + "我现在在做" + task + "任务");
    }
}
/**
 * create by yufeng on 2021/7/5 14:13
 */
public class EmployeeB implements IEmployee {
    private String goodAt = "写C++ bug";

    public void coding(String task) {
        System.out.println("我是员工B 我擅长" + goodAt + "我现在在做" + task + "任务");
    }
}

/**
 * create by yufeng on 2021/7/5 14:13
 */
public class EmployeeC implements IEmployee {
    private String goodAt = "写web bug";

    public void coding(String task) {
        
        System.out.println("我是员工C 我擅长" + goodAt + "我现在在做" + task + "任务");
    }
}
/**
 * create by yufeng on 2021/7/5 14:15
 */
public class LeaderDelegate implements IEmployee{
    Map map = new HashMap();

    public LeaderDelegate() {
        map.put("java", new EmployeeA());
        map.put("C++", new EmployeeB());
        map.put("web", new EmployeeC());
    }
    public void coding(String task) {
        if (!map.containsKey(task)) {
            System.out.println("这个任务" + task + "超出了我的能力范围");
            return;
        }
        map.get(task).coding(task);

    }
}

/**
 * create by yufeng on 2021/7/5 14:40
 */
public class Boss {
    public void commad(String task, LeaderDelegate leader) {
        leader.coding(task);

    }
}
/**
 * create by yufeng on 2021/7/5 14:43
 */
public class Test {
    public static void main(String[] args) {
        Boss boss = new Boss();
        boss.commad("java", new LeaderDelegate());
        boss.commad("C++", new LeaderDelegate());
        boss.commad("web", new LeaderDelegate());
        boss.commad("c", new LeaderDelegate());
    }
}
执行结果:
    我是员工A 我擅长写java bug我现在在做java任务
        我是员工B 我擅长写C++ bug我现在在做C++任务
        我是员工C 我擅长写web bug我现在在做web任务
        这个任务c超出了我的能力范围

4.委派模式在源码中的应用

类加载机制的双亲委派模型

5.优缺点

优点:通过委派任务可以将一个大的任务进行细化,然后通过统一对这些子任务进行管理,加快任务的执行效率
缺点:任务委派方式需要根据任务的复杂程度进行不同的改变,在任务比较复杂的情况下可能进行多重委派,容易造成紊乱

6.源码地址

委派模式源码地址

你可能感兴趣的:(委派模式)