委派模式:
自己做不了,需要委派另外一个人去做,自己不想去做的事情,去交给另外个人去做,自己想要看到的是结果就行了,这时就是委派。
比如在公司中 ,项目经理接到的任务,然后项目经理把任务下发到他底下的组长,码农,然后项目经理只要看到任务的结果就行了。功劳是项目经理的,苦劳是组长的,码农的。
在程序中:类B和类A是两个互相没有任何关系的类,但是B具有A一模一样的方法和属性;并且调用B中的方法/属性就是调用A中同名的方法和属性。
B好像就是一个受A授权委托的中介,第三方的代码不需要知道A的存在,也不需要和A发生直接的关系,通过B就可以直接使用A的功能,这样既能够使用A的公众功能,又能够很好的将A保护起来。
特点:
1、类似中介的功能(委托机制)
2、持有贝托人的引用
3、不关心过程,只关心结果。
委托模式是一对一,而中介模式是多对多的。
在 spring中BeanDefinitionParserDelegate将BeanDefinitionParser解析功能进行委托,来进行解析bean标签封装成beanDefinition对象。
代码如下:1、提供一个PM的类:项目经理
package com.weizhaoyang.delegate;
/**
* 项目经理
*/
public class PM {
//依赖Enginer,保护委托类,防止写在外面的话会被修改
private Enginer enginer=new Enginer();
/**
* 完成任务
*/
public String completeTask(){
//这里不会产生任何增强[做了任何操作就是委派模式了]
return enginer.completeTask();
}
}
2、提供一个工程师的类:
package com.weizhaoyang.delegate;
/**
* 工程师
*/
public class Enginer {
/**
* 完成任务
*/
public String completeTask(){
return "完成任务";
}
}
3、提供一个测试的类:
package com.weizhaoyang.delegate;
public class DeleGateTest {
public static void main(String[] args) {
PM pm =new PM();
System.out.println(pm.completeTask());
}
}
运行的结果如下:自己不完成任务,让工程师完成任务
总结:和代理模式的区别:委派模式不会产生新的功能