这篇文章主要讲解了“什么是Spring委派模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是Spring委派模式”吧!
首先委派模式不属于23种设计模式。
所谓委派,个人理解是:将为达到最终结果的事情交给其他人或中间人来干,我只要最终结果,其他的事情,由我委派的人来安排。
更直白的表达就是,比如,我们想要盖一栋楼房,盖完之后我要刷漆,这些事情我自己肯定不能做,所以我这时候就会去找一个“包工头”来帮我完成这件事情,我只要告诉“包工头”我要盖房子、我要给房子刷漆等命令,其他的事情我不管,最终能够交付给我这个刷完漆房子就行。那么“包工头”也不可能自己来干的吧,这个时候他就会去找人,盖楼房的、刷漆的等等;然后叫他们来干这件事情,干完之后,交付给我一个刷完漆的房子即可。这个过程也就是委派模式的一个体现。
委派模式看上去和我们之前所说的“静态模式”非常相似,它可以说是一种特殊情况的静态代理的全权代理。但是也是有区别的,“静态代理”更注重的是过程,而“委派模式”只注重“结果”。
我们现在就以上述中的例子,用代码来实现以下:
先创建工人抽象类接口,他们都具有干活的功能 Worker
:
/** * 抽象 工人 * * @author EamonZzz * @date 2019-10-26 15:09 */ public interface Worker { /** * 干活 * * @param command 听命令干活 */ void doWork(String command); }
然后有一个工人A,砌砖砌的很好,很适合盖楼,WorkerA
:
/** * 工人A 他砌砖砌的很好,所以叫来盖楼比较好 * * @author EamonZzz * @date 2019-10-26 15:11 */ public class WorkerA implements Worker { @Override public void doWork(String command) { System.out.println("我是工人A,包工头叫我 " + command); } }
然后再来一个工人B,他是专业刷漆的 WorkerB
:
/** * 工人A 他砌砖砌的很好,所以叫来盖楼比较好 * * @author EamonZzz * @date 2019-10-26 15:11 */ public class WorkerA implements Worker { @Override public void doWork(String command) { System.out.println("我是工人A,包工头叫我 " + command); } }
再来找一个包工头,包工头也是一名工人,但是这个包工头主要是组织工人干活,Contractor
:
/** * 包工头(也是一名工人),承接项目,分配工人 * * @author EamonZzz * @date 2019-10-26 15:07 */ public class Contractor implements Worker { private Map<String,Worker> targets = new HashMap<String, Worker>(); public Contractor() { targets.put("盖楼", new WorkerA()); targets.put("刷漆", new WorkerB()); } /** * 包工头不需要自己干活 * @param command */ @Override public void doWork(String command) { targets.get(command).doWork(command); } }
最后就是有盖楼刷漆的需求的人,Boss
:
/** * 我,需要盖楼的人,给包工头下达盖楼、刷漆的命令 * * @author EamonZzz * @date 2019-10-26 15:06:09 **/ public class Boss { /** * 下达 请求 * * @param command * @param contractor */ public void command(String command, Contractor contractor) { contractor.doWork(command); } }
来看一下测试类:
/** * @author EamonZzz * @date 2019-10-26 15:23 */ public class BossTest { @Test public void test() { Boss boss = new Boss(); boss.command("盖楼", new Contractor()); boss.command("刷漆", new Contractor()); } }
最终结果:
我是工人A,包工头叫我 盖楼 我是工人B,包工头叫我 刷漆
这个过程就模拟完毕,Boss 给包工头下达命令说我要盖楼,然后包工头就去找能够盖楼的人去盖楼;然后下达命令说,我的楼房需要刷漆了,包工头就去找刷漆的人来干这件事情。
在SpringMVC
中,也有委派模式的身影,比如我们最常见的 DispatcherServlet
它用来将我们前端URL
传过来的请求,分发到相应的 Controller
控制器来处理请求,那么它是怎么来完成这一过程的呢?
其实结合上面的实例场景就不难分析出来原理。
对于“委派模式”和“静态代理模式”的区别,在文章开头已经提到过,“静态代理”注重过程,代理类和被代理类都要去实现一个接口;而“委派模式”更注重结果,Boss
不需要实现Worker
这个接口。就拿敲代码这个能力来说,“静态代理”的Boss
类需要会敲代码,而“委派模式”中的Boss
则不需要会敲代码。
感谢各位的阅读,以上就是“什么是Spring委派模式”的内容了,经过本文的学习后,相信大家对什么是Spring委派模式这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。