java 設計模式--delegate 委派模式

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等開源框架中, 理解委派模式的實現原理可以更好理解這些框架源碼.

委派模式的核心是委派類的實現.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章