设计模式-委派模式

目录

 

一.什么是委派模式

二.代码演示


一.什么是委派模式

        委派模式(Delegate Pattern)又叫委托模式。它的基本作用就是负责任务的调度和任务分配,将任务的分配和执行分离开来。可以看做是一种特殊情况下的静态代理的全权代理。
不属于GOF 23种设计模式之一。
属于行为型模式。

委派模式的优点:

        通过任务委派能够将一个大型的任务细化,然后通过统一管理这些子任务的完成情况实现任务的跟进,能够加快任务执行的效率。

委派模式的缺点:

        任务委派方式需要根据任务的复杂程度进行不同的改变,在任务比较复杂的情况下可能需要进行多重委派,容易造成紊乱。

委派模式的应用场景:

  • 委派对象本身不知道如何处理一个任务(或一个请求),把请求交给其它对象来处理。
  • 实现程序的解耦。

委派模式和代理模式的区别:

  • 委派模式是行为型模式,代理模式是结构型模式
  • 委派是我让你做,代理是我帮你做
  • 委派模式注重的是任务派遣,注重结果;代理模式注重的是代码增强,注重过程。
  • 委派模式是一种特殊的静态代理,相当于全权代理。
  • 静态代理模式会在执行过程中在前面或者后面增加一些逻辑,而委派只是负责调用(就是把任务委派给别的对象做)

二.代码演示

        首先我们先设想一个场景: 老师需要找两个同学帮忙"搬桌子" 和"画海报",但是大学的老师可能连班级里的学生姓名都叫不全,所以她并不知道同学们谁擅长画海报和搬桌子,这时候他就把任务交给了班长班长就会把搬桌子这种力气活委派给经常健身的学生A,把画海报委派给擅长平面设计的学生B.

类图:

IStudent

public interface IStudent {
    void doing(String task);
}

StudentA

public class StudentA implements IStudent{
    private String goodAt = "健身";
    @Override
    public void doing(String task) {
        System.out.println("我是学生A,我擅长" + goodAt + ";现在我在" + task);
    }
}

StudentB

public class StudentB implements IStudent{
    private String goodAt = "平面设计";
    @Override
    public void doing(String task) {
        System.out.println("我是学生B,我擅长" + goodAt + ";现在我在" + task);
    }
}

Monitor

public class Monitor implements IStudent{
    private Map<String, IStudent> studentMap = new ConcurrentHashMap<String, IStudent>();
    public Monitor() {
        //加入一些简单的策略
        studentMap.put("搬桌子", new StudentA());
        studentMap.put("画海报", new StudentB());
    }

    @Override
    public void doing(String task) {
        if (studentMap.containsKey(task)) {
            studentMap.get(task).doing(task);
        } else {
            System.out.println("这个任务:" + task + "超出我的能力范围!");
        }
    }
}

Teacher

public class Teacher {
    public void allocating(String task, Monitor monitor) {
        monitor.doing(task);
    }
}

Test

public class Test1 {
    public static void main(String[] args) {
        new Teacher().allocating("搬桌子", new Monitor());
        new Teacher().allocating("画海报", new Monitor());
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w7486

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值