什么是委派模式?
委派模式,并不属于23种经典的设计模式。但是在Spring框架源码中,它有多次体现。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。
字面理解委派模式
项目组,包括:项目经理A、程序员B和程序员C。目前甲方有个项目,需要完成一个xxx任务。首先甲方会直接找到项目经理A去谈这个项目,而不是直接找B和C。项目经理分析这个项目,发现需要两人合作来完成,所以将A1模块分给B,将A2模块分给C,由B和C来合作完成该项目。
在该需求中,项目经理只起到了一个协调工作的作用,其实实际的工作是由B和C来完成的。由此可总结出委派模式的主要特点如下。
委派模式的主要特点
干活是我(B和C)的,功劳是你的(A)。 项目经理属于渔翁得利型
委派模式的其他特点
①委派机制,类似于中介的功能
②持有被委托人的引用(项目经理A可以随意使唤B和C)
代理模式:关心的是过程,不关心结果)
代码实现
1.甲方现在有一个项目projectA
/**
* 现在有一个项目projectA
*/
public interface IDelegate {
//项目A
public void projectA();
}
2.项目经理评估后,需要两个程序员B和C来完成
/**
* 程序员B
*/
public class ProgrammerB implements IDelegate{
@Override
public void projectA() {
System.out.println("程序员B完成模块A");
}
}
/**
* 程序员C
*/
public class ProgrammerC implements IDelegate{
@Override
public void projectA() {
System.out.println("程序员C完成模块B");
}
}
3.项目经理具体的分配过程
/**
* 项目经理A(虽然它也有工作,需要实现projectA,但是它的具体工作就是分配任务)
*/
public class ManagerA implements IDelegate{
/**
* 封装构造方法,来获得具体实现该需求(程序员B和C)的实例
*/
IDelegate iDelegate;
public ManagerA(IDelegate iDelegate) {
this.iDelegate = iDelegate;
}
@Override
public void projectA() {
this.iDelegate.projectA();
}
}
4.测试。即:分工完成后,项目具体的完成情况
/**
* 需求的完成情况
*/
public class test {
public static void main(String[] args) {
//1.现在甲方有一个新的需求
//2.项目经理分析完后,发现需要程序员B和C来完成
IDelegate exuctorB = new ProgrammerB();
IDelegate exuctorC = new ProgrammerC();
//3.项目经理获取到B和C的引用,然后让B和C来完成工作
new ManagerA(exuctorB).projectA();
new ManagerA(exuctorC).projectA();
//4.工作完成
//5.代码看着像是项目经理A完成的,但实际是B和C完成的。即:干活是B和C,实际功劳确实A的
}
}