delegate 委派模式
委派模式, 主要角色有三種: 抽象任務角色, 委派者角色, 具體任務角色.
實現層面上, 定義一個抽象接口, 它有若干實現類, 他們真正執行業務方法, 這些子類是具體任務角色; 定義委派者角色也實現該接口, 但它負責在各個具體角色實例之間做出決策, 由它判斷並調用具體實現的方法.
委派模式對外隱藏了具體實現, 僅將委派者角色暴露給外部, 如Spring的DispatcherServlet.
意圖
定義抽象接口的一個實現類, 他負責判斷和調用哪個實現類的實例。
實現
一. 定義抽象任務角色接口
/**
* 抽象任務角色
*/
public interface Task {
void doTask();
}
二. 具體任務角色, 實現上面的接口, 這裏定義兩個實現類
/**
* 具體實現類A
*/
public class ConcreteTaskA implements Task {
public void doTask() {
System.out.println("執行 , 由A實現");
}
}
/**
* 具體實現類B
*/
public class ConcreteTaskB implements Task {
public void doTask() {
System.out.println("執行 , 由B實現");
}
}
三. 委派角色, 是整個模式的核心角色, 下面代碼中我們使用隨機數來判斷應該實例化哪個具體實現類
import java.util.Random;
/**
* 代理角色
*/
public class TaskDelegate implements Task{
public void doTask() {
System.out.println("代理執行開始....");
Task task = null;
if (new Random().nextBoolean()){
task = new ConcreteTaskA();
task.doTask();
}else{
task = new ConcreteTaskB();
task.doTask();
}
System.out.println("代理執行完畢....");
}
}
四. 調用
public class TaskTest {
public static void main(String[] args) {
new TaskDelegate().doTask();
}
}
總結
優點: 對內隱藏實現, 易於擴展; 簡化調用;
委派模式大量使用在spring,mybatis等開源框架中, 理解委派模式的實現原理可以更好理解這些框架源碼.
委派模式的核心是委派類的實現.