任何知识点都需要弄清楚三件事情:
- 是什么
- 为什么
- 怎么做
是什么(what)
两个角色,委托人和受托人(社会关系平等)
公司里面:项目经理,普通员工(法律上平等,工作的关系,各自的职责不同)
干活是我的,功劳是你的(最重要的特点)
项目经理(委托人):主要职责是安排任务
普通员工(受托人):主要职责是执行任务
特点:
1.类似于中介的功能(委托机制)
2.持有被委托人的引用
3.不关心过程,只关心结果
为什么(why)
主要目的就是隐藏具体的实现逻辑。
下面描述一下Spring使用委派模式的场景:
IOC容器中,有一个Register的东西(为了告诉我们的容器,在这个类被初始化的过程中,需要做很多不同的业务逻辑,需要实现多个任务执行者,分别实现各自的功能),保证结果的多样性,对于用户来是只有一种方法。
怎么做(how)
首先,创建一个接口,以及三个实现类,代码如下:
public interface IExector {
/**
* 普通员工执行
* 在公司中,员工执行任务
* 规定在一周之内必须完成
*/
void doing();
}
/**
* 想法,用代码来描述这种想法
* 因此代码写得很简单
*
*/
public class ExectorA implements IExector{
@Override
public void doing() {
System.out.println("员工A执行任务");
}
}
public class ExectorB implements IExector{
@Override
public void doing() {
System.out.println("员工B执行任务");
}
}
public class Dispatcher implements IExector{
IExector exector;
public Dispatcher(IExector exector) {
this.exector = exector;
}
//项目经理,虽然也有执行方法
//但是他的工作职责是不一样的
@Override
public void doing() {
this.exector.doing();
}
}
其中,Dispatcher类相当于项目经理,ExectorA类和ExectorB类相当于员工A和员工B,当老板需要项目经理完成事情的时候,项目经理让员工A或员工B来完成。
然后看看测试类DispatcherTest,如下:
public class DispatcherTest {
public static void main(String[] args) {
Dispatcher dispatcher = new Dispatcher(new ExectorA());
//看上去好像是我们的项目经理在干活,实际干活的是普通员工
//典型就是,干活是我的,功劳是你的
dispatcher.doing();
}
}
//执行结果
员工A执行任务