《设计模式就该这样学》之委派模式详解

本文探讨了委派模式在Java编程中的运用,通过分析JDK的双亲委派模型和SpringIoC中的BeanDefinition解析过程,展示了委派模式如何简化类加载和控制反转。同时,举例说明了SpringMVC中DispatcherServlet的委派机制。
摘要由CSDN通过智能技术生成

最后编写客户端测试代码。

public class Test {

public static void main(String[] args) {

new Boss().command(“海报图”,new Leader());

new Boss().command(“爬虫”,new Leader());

new Boss().command(“卖手机”,new Leader());

}

}

通过上面代码,我们生动地还原了老板分配任务的业务场景,这也是委派模式的生动体现。其类图如下图所示。

图片

2 委派模式在JDK源码中的应用


JDK中有一个典型的委派,众所周知,JVM在加载类时用双亲委派模型,这又是什么呢?一个类加载器在加载类时,先把这个请求委派给自己的父类加载器去执行。如果父类加载器还存在父类加载器,则继续向上委派,直到顶层的启动类加载器;如果父类加载器能够完成类加载,则成功返回;如果父类加载器无法完成加载,则子加载器尝试自己去加载。从定义中可以看到,当双亲委派加载的一个类加载器加载类时,首先不是自己加载,而是委派给父类加载器。下面来看loadClass()方法的源码,此方法在ClassLoader中。在这个类里定义了一个双亲,用于下面的类加载。

public abstract class ClassLoader {

private final ClassLoader parent;

protected Class<?> loadClass(String name, boolean resolve)

throws ClassNotFoundException

{

synchronized (getClassLoadingLock(name)) {

Class<?> c = findLoadedClass(name);

if (c == null) {

long t0 = System.nanoTime();

try {

if (parent != null) {

c = parent.loadClass(name, false);

} else {

c = findBootstrapClassOrNull(name);

}

} catch (ClassNotFoundException e) {

}

if (c == null) {

long t1 = System.nanoTime();

c = findClass(name);

sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);

sun.m

Design Patterns: Elements of Reusable Object-Oriented Software(以下简称《设计模式》),一书由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides合著(Addison-Wesley,1995)。这四位作者常被称为“四人组(Gang of Four)”,而这本书也就被称为“四人组(或 GoF)”书。他们首次给我们总结出一套软件开发可以反复使用的经验,帮助我们提高代码的可重用性、系统的可维护性等,解决软件开发中的复杂问题。设计模式已诞生20多年,其间相继出版的关于设计模式的经典著作不计其数。如果说GoF的《设计模式》是设计模式领域的“圣经”,那么之后出版的各种关于设计模式的书籍可称为“圣经”的“批注版”或者“白话版”。本书正是基于GoF的《设计模式》来编写的。  本课程由《设计模式就该这样》作者亲授,课程内容和书籍完全同步,可以作为作者对“圣经”实践的精华总结,是一门可以真正能够落地的“设计模式”的课程,也是目前全网唯一一门结合框架源码如何落地“设计模式”这个角度来理解设计模式的课程。本课程将结合JDK、Spring、MyBatis、Tomcat、Netty等经典框架源码展开对设计模式的分析。当然,本课程中还会结合作者多年的“踩坑填坑”经验和“教答疑”经验,用比“圣经”更深刻、更全面、更通俗、更生动、更有趣、更接地气的方式并且结合真实业务场景分析每种设计模式的优缺点,治愈“设计模式选择困难症”。选设计模式就像相亲选对象,一旦做好了接受TA缺点的准备,那TA就一定属于你。所以,本课程内容对于日常开发而言更具有指导意义。内容均从实战角度出发,在日常应用中,设计模式从来都不是单个设计模式独立使用的。在实际应用中,通常多个设计模式混合使用,你中有我,我中有你。下图完整地描述了设计模式之间的混用关系,希望对大家有所帮助。在《设计模式就该这样》一书中,还有大量的UML图及易混淆的设计模式对比案例分析,也欢迎大家关注。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值