委派模式

簡介

委派模式不屬於GOF23種設計模式, 主要角色有三種: 抽象任務角色, 委派者角色, 具體任務角色.java

實現層面上, 定義一個抽象接口, 它有若干實現類, 他們真正執行業務方法, 這些子類是具體任務角色; 定義委派者角色也實現該接口, 但它負責在各個具體角色實例之間作出決策, 由它判斷並調用具體實現的方法.spring

委派模式對外隱藏了具體實現, 僅將委派者角色暴露給外部, 如Spring的DispatcherServlet.設計模式

意圖

定義抽象接口的一個實現類, 他負責判斷和調用哪一個實現類的實例。mybatis

類圖

委派

實現

一. 定義抽象任務角色接口框架

/** * 抽象任務角色 */ public interface Task { void doTask(); }

二. 具體任務角色, 實現上面的接口, 這裏定義兩個實現類dom

/** * 具體實現類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實現"); } } 

三. 委派角色, 是整個模式的核心角色, 下面代碼中咱們使用隨機數來判斷應該實例化哪一個具體實現類spa

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

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

相關文章
相關標籤/搜索