津津乐道设计模式 - 委派模式详解(以家庭弟位让你彻底明白)

news2024/11/15 19:32:40

在这里插入图片描述

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志
🎐 个人CSND主页——Micro麦可乐的博客
🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战
🌺《RabbitMQ》本专栏主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战
🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~

津津乐道设计模式 - 委派模式详解

  • 什么是委派模式
  • 生活案例
  • 代码案例
  • 在开源框架中查找委派模式身影
  • 结语

什么是委派模式

委派模式(Delegate Pattern)是一种软件设计模式,它允许一个对象(委派者)将任务委派给其他对象(委派对象)来执行,以实现任务的分发和处理。跟代理模式有点像,但是代理模式注重过程,而委派模式注重结果,我们可以认为委派模式就是一种特殊情况下的静态全权代理,比如Spring中大家熟悉的DispatcherServlet

生活案例

在生活场景中,可以通过以下例子来说明委派模式:

假设目前你是三口之家,妈妈、孩子、爸爸、宠物狗,首先我们都需要认清爸爸在家庭的弟位,孩子 > 妈妈 > 爸爸=宠物狗 😂😂😂😂;

  • 现在孩子饿了,会告诉妈妈,妈妈再委派爸爸去做饭;
  • 现在孩子困了,会告诉妈妈。妈妈再委派爸爸去讲解睡前故事哄孩子睡觉;
  • 现在孩子无聊了,会告诉妈妈。妈妈再委派宠物狗陪孩子玩;

在这个场景中,妈妈是委派者,负责接收孩子需求并分配给爸爸处理。而爸爸是委派对象,他根据妈妈的指示负责处理各个方面的生活安排。比如洗衣、做饭、拖地程等。

这种委派模式的好处是,妈妈可以集中精力照顾孩子这个小祖宗,而将具体的任务分配给爸爸来完成。委派对象也能更加专注地处理自己擅长的任务,提高工作效率和质量(说白了爸爸就要求什么都会 😮‍💨)。

代码案例

上面一家三口案例中,我们使用JAVA代码来给大家演示一下

/**
 * 定义工作接口
 */
public interface Worker {
    void doing(String thing);
}

创建委派对象爸爸和狗狗

/**
 * 委派对象 爸爸
 */
public class Father implements Worker {
    @Override
    public void doing(String thing) {
        System.out.println("爸爸开始完成妈妈委托: " + thing);
        // 具体的任务处理逻辑
        // ...
    }
}

/**
 * 委派对象 狗狗
 */
public class Dog implements Worker {
    @Override
    public void doing(String thing) {
        System.out.println("狗狗开始完成妈妈委托: " + thing);
        // 具体的任务处理逻辑
        // ...
    }
}

创建妈妈角色

/**
 * 定义妈妈 委派者
 */
public class Mother implements Worker {

    private static Map<String, Worker> workerMap = new HashMap<>();

    public Mother() {
        workerMap.put("cooking", new Father());
        workerMap.put("play", new Dog());
    }

    /**
     * 做事情
     *
     * @param thing 委派任务名
     */
    @Override
    public void doing(String thing) {
        System.out.println("我是妈妈,小祖宗Boss派活了: " + thing + ",我来指定委派任务: " + thing);
        if (workerMap.containsKey(thing)) {
            workerMap.get(thing).doing(thing);
        } else {
            System.err.println("目前没有可以指派的委派对象");
        }
    }

}

创建孩子角色 - BOSS

/**
 * 小孩(老板)
 */
public class Boss {

    private Mother mother;
    
    public void setMother(Mother mother) {
        this.mother = mother;
    }
    public void command(String thing) {
        System.out.println("我是小祖宗,我现在需要: " + thing);
        mother.doing(thing);
    }
}

最后测试类

public class DelegatePatternTest {
    public static void main(String[] args) {
        //创建孩子啊 小祖宗
        Boss boss = new Boss();
        // 爸爸做饭
        boss.setMother(new Mother());
        boss.command("cooking");
        System.out.println("================================");
        // 狗狗陪玩
        boss.command("play");
    }
}

最终输出如下:
在这里插入图片描述

在开源框架中查找委派模式身影

上面我们就提到了Spring中的DispatcherServlet就使用了委派模式。
前端请求都统一由 DispatcherServletdoService() 方法处理,然后在 doService() 方法中调用 doDispatch() 方法,在 doDispatch() 方法中,进行复杂的任务进行分解,分发执行并通过一个委派者角色,会获取业务处理的 handler ,执行 handle() 方法处理请求结果。

其实还有很多地方都使用到了委派模式,代码中一般 DelegateDispatcher 结尾的都是委派类。大家可以搜索Spring源码查阅

结语

在软件设计中,委派模式可以帮助实现任务的分发和协调,使得代码结构更加清晰和可维护。委派者负责接收任务请求并选择合适的委派对象来处理,而委派对象则负责具体的任务执行。这种模式可以将任务分解,实现任务的解耦和灵活性,同时提高代码的可重用性和可扩展性。

总结起来,委派模式是一种通过将任务委派给其他对象来实现任务分发和处理的设计模式。它可以在生活场景中,例如旅行社经理委派员工安排旅行活动,或在软件设计中,实现任务的解耦和协调。

样例代码:https://github.com/lhmyy521125/toher-designmode

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/677293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32 Proteus仿真DHT11温度湿度光敏光强DS1302闹钟-0044

STM32 Proteus仿真DHT11温度湿度光敏光强DS1302闹钟-0044 Proteus仿真小实验&#xff1a; STM32 Proteus仿真DHT11温度湿度光敏光强DS1302闹钟-0044 功能&#xff1a; 硬件组成&#xff1a; STM32F103C6T6单片机 DHT11温度湿度光敏电阻采集光强 多个按键模拟红外遥控1个LED…

node.js--vue仓库进销存管理信息系统whkb8

随着社会的发展&#xff0c;系统的管理形势越来越严峻。越来越多的用户利用互联网获得信息&#xff0c;但各种信息鱼龙混杂&#xff0c;信息真假难以辨别。为了方便用户更好的获得仓库管理信息&#xff0c;因此&#xff0c;设计一种安全高效的仓库管理信息系统极为重要。 为设计…

【从零开始学习JAVA | 第十五篇】 多态

前言&#xff1a; 本篇我们来解释一下什么是多态关系&#xff0c;多态关系属于面向对象三大特征的最后一个&#xff0c;可以说面向对象的重点就在多态&#xff0c;因此我们要学好面向对象编程思想&#xff0c;就要学好多态。 多态&#xff1a; Java中的多态是指同一类对象在不同…

nssctf之SSRF刷题记录

[NISACTF 2022]easyssrf 题目讲的主要是ssrf以及php伪协议的能力&#xff0c;题目详情如下 一般来说&#xff0c;当一个网站出现curl类的功能时就可能会出现ssrf之类的漏洞&#xff0c;常见的ssrf协议如下 file:/// dict:// sftp:// ldap:// tftp:// gopher://file:// 这种…

基于python的matplotlib、numpy库实现的图形绘制(数据可视化)

一、sin&#xff0c;cos函数 1.题目要求 编写程序&#xff0c;绘制正弦曲线和余弦曲线。 提示&#xff1a;利用numpy的linspace()、sin()或cos()函数生成样本数据、正弦或余弦值。 2.函数讲解及代码 import matplotlib.pyplot as plt import numpy as np#linspace函数是用…

【MySQL数据库 | 第二十篇】explain执行计划

目录 前言&#xff1a; explain&#xff1a; 语法&#xff1a; 总结&#xff1a; 前言&#xff1a; 上一篇我们介绍了从时间角度分析MySQL语句执行效率的三大工具&#xff1a;SQL执行频率&#xff0c;慢日志查询&#xff0c;profile。但是这三个方法也只是在时间角度粗略的…

kubernetes入门案例

kubernetes入门案例 本文我们通过一个 Java Web 应用例子来介绍 kubernetes 的使用&#xff0c;可以让新手快速上手和实践。 此 Java Web 应用的结构比较简单&#xff0c;是一个运行在 Tomcat 里的 Web App&#xff0c;JSP 页面通过 JDBC 直接访问 MySQL 数据库并展示数据。…

青梅产业成立“国家队”,溜溜梅迎来树立品牌良机?

扩大内需在今年政府工作报告中被频频提及。国务院发展研究中心原副主任王一鸣认为&#xff0c;激活潜在消费需求&#xff0c;将释放中国超大规模市场的经济增长潜力。 如今&#xff0c;休闲零食市场也正在经历这样一场激活潜在需求的变革。无论是洽洽食品、三只松鼠、良品铺子…

Kubernetes(k8s)容器编排概述

目录 1 k8s 是什么2 K8s的由来2.1 K8s发展历程2.2 发展时间线 3 为什么使用k8s3.1 什么是容器3.2 什么是 Kubernetes3.3 K8s 的著名优势特色3.3.1 一个平台搞定所有3.3.2 云环境无缝迁移3.3.3 高效的利用资源3.3.4 开箱即用的自动缩放能力3.3.5 使 CI/CD 更加简单3.3.6 可靠性 …

香橙派 1. 上手,配置wifi以及vnc

0. 环境 香橙派4以及电源 读卡器 32GB TF卡 1. 重新烧写固件 Orangepi4_2.1.2_ubuntu_bionic_desktop_linux4.4.179.img 用sd card formatter 格式化TF卡 安装Win32DiskImager&#xff0c;打开&#xff0c;选择IMG&#xff0c;确认U盘&#xff0c;点击写入。 2. 插上TTL 注意…

Mybatis相关知识(2)

Mybatis相关知识 今天接着上期mybatis相关知识进行讲解&#xff0c;今天主要是讲解mybatis和数据库相关的映射&#xff0c;标签和SQL编写等。 会结合实际业务和代码进行讲解。 1 占位符和传参的相关问题 先来看两条xml的SQL。第一条SQL从id名称可知&#xff0c;是根据id删除数…

cookie、session、token学习笔记

一.cookie 1.什么是cookie&#xff1f; Cookie用于存储web页面的用户信息。 Cookie是一些数据&#xff0c;存储于你电脑的文本文件中。 当web服务器向浏览器发送web页面时&#xff0c;在连接关闭后&#xff0c;服务端不会记录用户的信息。 而Cookie的作用就是用于解决“如…

【unity每日一记】 三大金星之(音频Audio + 碰撞和触发+光源组件)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

Kubernetes(k8s)部署模式发展

目录 1 简介2 物理单机(~2000)2.1 主要代表 3 虚拟化&#xff1a;初期&#xff08;2001~2009&#xff09;3.1 VMware3.2 laaS 4 虚拟化&#xff1a;成熟期&#xff08;2010~至今&#xff09;4.1 OpenStack4.2 虚拟化四巨头 5 容器化:&#xff08;2013-至今&#xff09;5.1 Dock…

【从零开始学习JAVA | 第十三篇】继承

目录 前言&#xff1a; 引入&#xff1a; 继承&#xff1a; 小拓展&#xff1a; 优点&#xff1a; 成员方法的继承问题&#xff1a; 总结&#xff1a; 前言&#xff1a; 继承是面向对象三大特性之一&#xff0c;它是在封装之后我们讲解的一个重要的性质&#xff0c;继承…

【Kubernetes资源篇】DaemonSet控制器入门实战详解

文章目录 一、DaemonSet控制器理论知识1、DaemonSet控制器是什么&#xff1f;2、DaemonSet控制器工作原理3、DaemonSet典型应用场景4、DaemonSet与Deployment的区别 二、案例&#xff1a;DaemonSet控制器实战演示1、使用DaemonSet部署日志收集组件2、DaemonSet管理Pod滚动更新 …

数据库期末复习大总结 数据库课程学习资料(包含数据库全部章节的经典例题)【我的数据库期末复习】

为刚开始上大学数据库课程 提供学习方向【我的数据库期末复习】 第一章 绪论1.1 数据库系统概述 第二章 关系数据库2.1 关系的基本概念2.2 关系的完整性 关系数据库标准语言SQL3.1.1 SQL创建模式和表3.1.2 SQL修改和删除表3.2.1 SQ单表查询3.2.2 分组聚合和分组过滤3.2.3 多表联…

Matplotlib---散点图

1. 散点图 scatter函数用于绘制散点图。下面是scatter函数的语法格式&#xff1a; scatter(x, y, sNone, cNone, markerNone, cmapNone, normNone, vminNone, vmaxNone, alphaNone, linewidthsNone, edgecolorsNone, **kwargs)参数解释&#xff1a; x&#xff1a;指定散点的…

【二分查找】详细图解

目录 一.什么是二分查找法&#xff1f; 二.算法要求 三.算法思想 图解&#xff08;要找的数k的值为3&#xff09; 参考代码 一.什么是二分查找法&#xff1f; 二分查找也称折半查找&#xff08;Binary Search&#xff09;&#xff0c;它是一种效率较高的查找方法。但是&am…

GEE:DYNAMICWORLD/V1数据集介绍

作者:CSDN @ _养乐多_ 本文将介绍GOOGLE/DYNAMICWORLD/V1数据集。 在Dynamic World数据集中,每个波段代表了某个特定类别的土地覆盖概率。这些概率表示了一个像素完全被某种土地覆盖类别所覆盖的可能性,其取值范围从0到1。每个波段的名称和描述指示了对应类别的土地覆盖类…