暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

spring源码设计模式分析(七)-委派模式

IT分享 2020-03-02
525

委派模式:

自己做不了,需要委派另外一个人去做,自己不想去做的事情,去交给另外个人去做,自己想要看到的是结果就行了,这时就是委派。

比如在公司中 ,项目经理接到的任务,然后项目经理把任务下发到他底下的组长,码农,然后项目经理只要看到任务的结果就行了。功劳是项目经理的,苦劳是组长的,码农的。

在程序中:类B和类A是两个互相没有任何关系的类,但是B具有A一模一样的方法和属性;并且调用B中的方法/属性就是调用A中同名的方法和属性。

B好像就是一个受A授权委托的中介,第三方的代码不需要知道A的存在,也不需要和A发生直接的关系,通过B就可以直接使用A的功能,这样既能够使用A的公众功能,又能够很好的将A保护起来。

特点:

1、类似中介的功能(委托机制)

2、持有贝托人的引用

3、不关心过程,只关心结果。

委托模式是一对一,而中介模式是多对多的。

在 spring中BeanDefinitionParserDelegate将BeanDefinitionParser解析功能进行委托,来进行解析bean标签封装成beanDefinition对象。

代码如下:1、提供一个PM的类:项目经理

  1. package com.weizhaoyang.delegate;


  2. /**

  3. * 项目经理

  4. */

  5. public class PM {

  6. //依赖Enginer,保护委托类,防止写在外面的话会被修改

  7. private Enginer enginer=new Enginer();

  8. /**

  9. * 完成任务

  10. */

  11. public String completeTask(){

  12. //这里不会产生任何增强[做了任何操作就是委派模式了]

  13. return enginer.completeTask();

  14. }

  15. }

2、提供一个工程师的类:

  1. package com.weizhaoyang.delegate;


  2. /**

  3. * 工程师

  4. */

  5. public class Enginer {

  6. /**

  7. * 完成任务

  8. */

  9. public String completeTask(){

  10. return "完成任务";

  11. }

  12. }

3、提供一个测试的类:

  1. package com.weizhaoyang.delegate;


  2. public class DeleGateTest {

  3. public static void main(String[] args) {

  4. PM pm =new PM();

  5. System.out.println(pm.completeTask());

  6. }

  7. }

运行的结果如下:自己不完成任务,让工程师完成任务

总结:和代理模式的区别:委派模式不会产生新的功能


如果调试一个程序让你很苦恼,千万不要放弃,成功永远在拐角之后,除非你走到拐角,否则你永远不知道你离他多远,所以,请记住,坚持不懈,直到成功

文章转载自IT分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论