场景简介
王大哥的女儿,装饰者模式中提到的那个肤白貌美的程序媛
;通过几年的努力成为了一个项目组长,日常的工作由原来的基础开发,转变为工作的分配以及进度的管理,那么她是如何开展工作的呢?
委派模式
委派模式
在于指定具体的类,同时保护被指定的类,向调用方屏蔽内部调用细节;正如在我们的日常工作量,一个英明的领导通常只会向项目管理者询问项目的进度以,而不关注哪个功能是由哪个程序员完成的;通常委托模式有如下特性:
- 供调用方使用,并向其屏蔽内部实现细节
- 具体功能有被委托者实现
- 有委托者进行被委托者的选择和调度
代码演示
首先,实现我们定义一个Worker
员工接口
public interface Worker {
/**
* 执行工作
*/
void doWork();
}
其次,我们实现一个具体任务执行的员工OriginalWorker
public class OriginalWorker implements Worker {
@Override
public void doWork() {
System.out.println("I am working very hard");
}
}
然后,我们实现一个任务委派者DelegateWorker
public class DelegateWorker implements Worker {
private Worker worker;
public DelegateWorker(Worker worker) {
this.worker = worker;
}
@Override
public void doWork() {
System.out.print("Hi Boss,");
worker.doWork();
}
}
写一个简单的Demo,来演示整个过程:
public class BossDemo {
public static void main(String[] args) {
Worker delegate = new DelegateWorker(new OriginalWorker());
delegate.doWork();
}
}
演示效果:
Hi Boss,I am working very hard
总结
以上示例部分读者可能感觉到有些暗讽的味道,但是请谨记技术无罪,有罪的是人
;嘻嘻,我们回到重点,委派模式在Spring 和 MyBatis 源码中都有其影子,例如:MyBatis 在实现二级缓存CachingExecutor
时,就是利用了委派模式,感兴趣的读者可以取研究一下,或者移步本人的这可能是简书最白话的MyBatis源码解读;简单的类图结构如下: