前言:学习目标:精简程序逻辑,提升代码的可读性。内容定位:希望通过对委派模式的学习,让自己写出更加优雅的代码的人群。

一、委派模式定义
委派模式(Delegate Pattern)的基本作用是负责任务的调度和分配任务,跟代理模式很像,可以看作是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果。
不属于GOF 23中设计模式之一
属于行为型模式
二、常见应用场景案例
DispatcherServlet
类名以Delegate结尾的
包含Dispatcher的一般都是委派模式
Spring框架IOC中的BeanDefinitionParserDelegate:Spring提供多种方式(java、xml、注解)配置bean,该类负责分发处理,注入的bean信息最终会被加载为一个BeanDefition对象(描述对象信息)
应用场景:解决多任务,又不希望把这些任务或者具体的实现让用户知道(不让用户直接交互),创建一个中间类,实现全权代理,达到对用户来说只有一个入口的目的。

三、简单代码案例
例子:老板需要安排任务给员工,但是又不能直接让老板去了解每个员工的擅长职能,就可以创建一个中间的经理职位负责了解职员的特长,分发任务。

boss类

public class Boss {

/*** 发任务* @param command* @param leader*/
public void command(String command,Leader leader){leader.doing(command);
}

}
1
2
3
4
5
6
7
8
9
10
11
经理类

public class Leader {
// 预先知道每个员工的特长、特征,分发任务
private Map<String,IEmployee> register = new HashMap<String,IEmployee>();

public Leader(){register.put("加密",new EmployeeA());register.put("架构",new EmployeeB());
}public void doing(String command){

// 交给指定的员工去做
register.get(command).doing(command);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
员工接口

public interface IEmployee {

/*** 做事* @param command*/
void doing(String command);

}
1
2
3
4
5
6
7
8
员工A

public class EmployeeA implements IEmployee {
@Override
public void doing(String command) {
System.out.println(“我是员工A,我开始干活了,我擅长加密,执行”);
}
}
1
2
3
4
5
6
员工B

public class EmployeeB implements IEmployee {
@Override
public void doing(String command) {
System.out.println(“我是员工B,我擅长架构,我开始干活了”);
}
}
1
2
3
4
5
6
测试类

public class DelegateTest {

public static void main(String[] args) {new Boss().command("架构",new Leader());
}

}
1
2
3
4
5
6
四、SpringMvc的DispatcherServlet简单实现
DispatcherServlet是前端控制器委派模式的实现,提供Spring Web MVC的集中访问点,负责职责的分派

web.xml

Archetype Created Web Application delegateServlet com.zc.pattern.delegate.mvc.DispatcherServlet 1 delegateServlet /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 DispatcherServlet

package com.zc.pattern.delegate.mvc;

import com.zc.pattern.delegate.mvc.controllers.MemberController;
import com.zc.pattern.delegate.mvc.controllers.OrderController;
import com.zc.pattern.delegate.mvc.controllers.SystemController;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class DispatcherServlet extends HttpServlet {

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// 完成调度
doDispach(req,resp);
}

private void doDispach(HttpServletRequest req, HttpServletResponse resp) throws IOException {String uri = req.getRequestURI();if ("getMemberById".equals(uri)){String mid = req.getParameter("mid");new MemberController().getMemberById(mid);}else if ("getOrderById".equals(uri)){String oid = req.getParameter("oid");new OrderController().getOrderById(oid);}else if ("getSystemById".equals(uri)){new SystemController().logout();}else {resp.getWriter().write("404 not found");}
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
MemberController

public class MemberController {

public void getMemberById(String mid){System.out.println("获取员工id");
}

}
1
2
3
4
5
6
7
OrderController

public class OrderController {

public void getOrderById(String oid){System.out.println("获取订单id");
}

}
1
2
3
4
5
6
7
SystemController

public class SystemController {

public void logout(){System.out.println("退出");
}

}
1
2
3
4
5
6
7
为了答谢大家关注和支持,这次给大家准备了限时领取福利:阿里面试题、百度面试题、滴滴面试题、华为面试题、京东面试题、美团面试题、腾讯面试题、头条面试题、中兴面试题。
在这里插入图片描述
还等什么小编推荐自己的linuxC/C++语言交流群:【1106675687】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!前100名进群领取,额外赠送一份价值199的C/C++、linux资料包含(视频教程、电子书、实战项目及代码),下面部分展示。

在这里插入图片描述
在这里插入图片描述

Linux下的设计模式——委派模式(Delegate Pattern)深入浅出【建议新手收藏】相关推荐

  1. 认真学习设计模式之委派模式(Delegate Pattern)

    委派模式不属于GOF23种设计模式, 主要角色有三种: 抽象任务角色, 委派者角色, 具体任务角色. 委派模式具体是指定义一个抽象接口, 它有若干实现类, 他们真正执行业务方法, 这些子类是具体任务角 ...

  2. Linux该怎么学?LINUX就该这么学(内含学习教程)【建议新手收藏】

    前言:本章节带领读者从0基础了解虚拟机与红帽系统,完整的演示了在VM与KVM中安装红帽RHEL7系统的方法. 特别增加了超级实用的Linux系统找回root密码.虚拟机功能增强包.VNC远程控制服务等 ...

  3. 【chromium】常用设计模式:委托模式(Delegate Pattern)、观察者模式、 工厂模式。

    文章目录 对象行为型模式 观察者模式(Observer Pattern) 类创建型模式 工厂模式(Factory Pattern) Delegate 和 client 委托模式(Delegate Pa ...

  4. C++设计模式——原型模式(Prototype Pattern)

    C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...

  5. 设计模式-代理模式(Proxy Pattern)

    设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...

  6. 《Linux指令从入门到精通》——4.2 Linux下的简单文字模式文本编辑器

    本节书摘来自异步社区<Linux指令从入门到精通>一书中的第4章,第4.2节,作者:宋磊 , 宋馥莉 , 雷文利著,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  7. 在linux下配置网桥透明模式防火墙

    在linux下配置网桥透明模式防火墙 一.透明模式防火墙与透明代理的概念       一般而言,防火墙的两个网络接口应分属两个不同的网络,根据系统管理员定义的访问规则在两个接口之间转发数据包,或者拒绝 ...

  8. JAVA设计模式-委派模式(Delegate)

    委派模式不是23种设计模式中的设计模式,它是比较常见的 场景:老板-项目经理-开发人员 老板向项目经理下达任务,项目经理让开发人员去实现(需要拿到开发人员的引用,代理模式),但是选择具体哪个开发人员是 ...

  9. 解读设计模式----策略模式(Strategy Pattern)

    一.模式概述      策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法.       在我应 ...

最新文章

  1. Don’t Use the Win32 API PostThreadMessage() to Post Messages to UI Threads(翻译)
  2. Java新手小程序之三
  3. 不定积分24个基本公式_高分攻略丨语文阅读理解的24个万能答题公式
  4. 微信小程序分享朋友圈功能
  5. delphi7aes加密解密与java互转_Java 加密/解密Excel
  6. java服务器返回错误码,java - java.io.IOException:服务器返回URL的HTTP响应代码:409 - 堆栈内存溢出...
  7. java编码gbk的不可_解决 java “错误:编码GBK 的不可映射字符”
  8. Linux系统下载镜像
  9. 把一个base64编码的图片绘制到canvas (canvas的图片在转成dataurl)
  10. IT服务管理流程控制主要绩效指标有哪些?
  11. 用python裁剪PDF文档
  12. 半挂式洒水车的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  13. sklearn机器学习:随机森林学习与调参
  14. labelImg ZeroDivisionError: float division by zero解决办法
  15. nant_NAnt和FxCopCmd今天我在NAnt和
  16. 消除 Buck 转换器中的 EMI 问题(一、产生原因)
  17. 在32位、64位操作系统下各数据类型所占的字节数
  18. ghost Ubuntu环境下安装
  19. notepad++使用技巧小结(智能高亮,设置高亮颜色,取消高亮)
  20. 邮箱如何批量购买?邮箱购买推荐,买邮箱哪个比较便宜呢?

热门文章

  1. WORD中如何添加复选框控件?
  2. 【docker】安装教程
  3. jQuery学习之六---属性
  4. CSS样式引入方式和部分CSS样式的设置
  5. 1_初识less引用变量作用域变量差值
  6. python做bi系统_2020年很受Python工程师喜爱的5款数据可视化bi软件
  7. 多线程的概念及实现方式
  8. python 数据结构 树 dev get items_python数据结构之树(二叉树的遍历)
  9. 数据从hadoop到oracle,如何向 hadoop 导入数据
  10. android系统加载主题的流程,详解Android布局加载流程源码