中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

說說設(she)計模式~委派模式

回到目錄

概述

委(wei)派模(mo)(mo)(mo)式(shi)(shi)(Delegate Pattern)又叫作委(wei)托模(mo)(mo)(mo)式(shi)(shi),是一種(zhong)面向對象(xiang)的(de)設計(ji)模(mo)(mo)(mo)式(shi)(shi),允許對象(xiang)組合實現與繼承相同(tong)的(de)代(dai)(dai)碼重(zhong)用。它的(de)基本作用就是負責任務的(de)調用和(he)分配(pei),是一種(zhong)特(te)殊的(de)靜態代(dai)(dai)理模(mo)(mo)(mo)式(shi)(shi),可以理解為(wei)全權代(dai)(dai)理模(mo)(mo)(mo)式(shi)(shi),但(dan)是代(dai)(dai)理模(mo)(mo)(mo)式(shi)(shi)注(zhu)重(zhong)過程(cheng),而委(wei)派模(mo)(mo)(mo)式(shi)(shi)注(zhu)重(zhong)結果。委(wei)派模(mo)(mo)(mo)式(shi)(shi)屬(shu)于行為(wei)型設計(ji)模(mo)(mo)(mo)式(shi)(shi),不屬(shu)于GoF的(de)23種(zhong)設計(ji)模(mo)(mo)(mo)式(shi)(shi)。

使用場景

  1. 任(ren)務(wu)分(fen)發:當一個任(ren)務(wu)需要被(bei)分(fen)發給多個不同的(de)執(zhi)行者來完(wan)成時,委(wei)派(pai)(pai)(pai)模式(shi)可以將(jiang)任(ren)務(wu)的(de)分(fen)發和執(zhi)行解(jie)耦。委(wei)派(pai)(pai)(pai)者負責(ze)接收任(ren)務(wu)并將(jiang)任(ren)務(wu)委(wei)派(pai)(pai)(pai)給具體的(de)執(zhi)行者進行處理。

  2. 復雜(za)任(ren)務處理:當一個(ge)任(ren)務較為復雜(za),需要由多個(ge)不同(tong)的(de)子任(ren)務協同(tong)完成時,委派模式可(ke)以(yi)將(jiang)任(ren)務拆分(fen)成多個(ge)子任(ren)務,由不同(tong)的(de)執行者負責處理各自的(de)子任(ren)務。

  3. 中央調度(du):當需(xu)要一個中央調度(du)者來協調和(he)管(guan)理多個任(ren)務的執行時,委派模式可以使中央調度(du)者作為委派者,將任(ren)務委派給不同的執行者來完成。

  4. 策略選擇:當(dang)根據不(bu)同(tong)的條件或參數選擇不(bu)同(tong)的策略或實(shi)現方(fang)式時,委派模式可以根據條件選擇合適(shi)的實(shi)現類來執行任務。

  5. 事件(jian)驅動(dong):當事件(jian)觸發后需(xu)要(yao)將(jiang)(jiang)事件(jian)分發給(gei)(gei)不同的(de)(de)處理(li)者來(lai)處理(li)時,委派模式可(ke)以(yi)作為事件(jian)的(de)(de)委派者,根(gen)據事件(jian)的(de)(de)類型將(jiang)(jiang)事件(jian)分發給(gei)(gei)對應(ying)的(de)(de)處理(li)者進行處理(li)。

總而言(yan)之,委派模式適(shi)用于任務分(fen)(fen)發和執行(xing)的(de)場(chang)景,可以將任務的(de)分(fen)(fen)發和執行(xing)進行(xing)解耦,提高代碼(ma)的(de)可維護性和擴展性,同時(shi)實現任務的(de)靈活分(fen)(fen)配(pei)和處(chu)理。

在代碼中的體現

下面(mian)是一(yi)個簡(jian)單的示(shi)例(li),使用(yong)Java代(dai)碼演示(shi)委(wei)派(pai)模式的實現:

// 委派任務的接口
public interface Task {
    void execute();
}

// 具體的任務實現類A
public class TaskA implements Task {
    @Override
    public void execute() {
        System.out.println("執行任務A");
    }
}

// 具體的任務實現類B
public class TaskB implements Task {
    @Override
    public void execute() {
        System.out.println("執行任務B");
    }
}

// 委派者
public class TaskDelegate {
    private Task task;

    public void setTask(Task task) {
        this.task = task;
    }

    public void doTask() {
        task.execute();
    }
}

// 客戶端
public class Main {
    public static void main(String[] args) {
        TaskDelegate delegate = new TaskDelegate();
        
        // 委派給任務A執行
        delegate.setTask(new TaskA());
        delegate.doTask();
        
        // 委派給任務B執行
        delegate.setTask(new TaskB());
        delegate.doTask();
    }
}

在上面的示例中,Task 接口定義了任務的執行方法 execute()TaskATaskB 是具體的任務實現類。TaskDelegate 充當委派者的角色,負責接收任務并將任務委派給具體的實現類來執行。Main 類作為(wei)客戶(hu)端示例,創建委派(pai)者對象并通過設置(zhi)不同的任務來執行。

在這個例子中,TaskDelegate 將任務(wu)的(de)(de)執(zhi)行(xing)(xing)委(wei)(wei)(wei)派給(gei)了(le)不同(tong)(tong)的(de)(de)具體(ti)任務(wu)類(lei),根據設置的(de)(de)任務(wu)類(lei)型,委(wei)(wei)(wei)派者(zhe)會(hui)將任務(wu)分發給(gei)不同(tong)(tong)的(de)(de)實現(xian)類(lei)來執(zhi)行(xing)(xing)。通過委(wei)(wei)(wei)派模式,委(wei)(wei)(wei)派者(zhe)可以將具體(ti)的(de)(de)任務(wu)分發給(gei)不同(tong)(tong)的(de)(de)執(zhi)行(xing)(xing)者(zhe),實現(xian)任務(wu)的(de)(de)靈活分配(pei)和(he)執(zhi)行(xing)(xing)。

在spring中的應用

當(dang)涉(she)及到Spring框架中的委派模式時,最典型的例子就是Spring的核心Web組件(jian)之一——DispatcherServlet。

在Spring MVC中,DispatcherServlet充當了前端(duan)控制器(qi)(Front Controller)的(de)角色(se)。它是客(ke)戶(hu)端(duan)請求的(de)中央調度者,負(fu)責(ze)接(jie)收所有的(de)HTTP請求,并(bing)將請求委派給合適的(de)處(chu)理器(qi)(Handler)進行處(chu)理。

DispatcherServlet的工作流程(cheng)如下:

  1. 客戶端發起HTTP請求到DispatcherServlet。

  2. DispatcherServlet接(jie)收到請求后,根(gen)據請求的URL路徑(或(huo)其(qi)他條件)選擇(ze)合適的處理(li)器來處理(li)請求。

  3. DispatcherServlet將請求委派給(gei)選(xuan)擇的處(chu)理(li)器進行(xing)處(chu)理(li)。

  4. 處理器執行業務(wu)邏輯,生成相應的結果。

  5. 處(chu)理(li)器將(jiang)結果返回給(gei)DispatcherServlet。

  6. DispatcherServlet負責(ze)將處理(li)器的結果進行(xing)包裝,如渲染視圖(tu)、返回JSON數據等。

  7. DispatcherServlet將(jiang)最(zui)終結果(guo)返回給(gei)客戶(hu)端。

在這個過程(cheng)中,DispatcherServlet充當了委派者(zhe)的(de)(de)(de)(de)(de)角色,根據請(qing)求(qiu)的(de)(de)(de)(de)(de)URL路(lu)徑選擇合適的(de)(de)(de)(de)(de)處(chu)理(li)(li)(li)(li)器來處(chu)理(li)(li)(li)(li)請(qing)求(qiu)。DispatcherServlet并不(bu)直接處(chu)理(li)(li)(li)(li)請(qing)求(qiu),而是將請(qing)求(qiu)委派給具(ju)體(ti)的(de)(de)(de)(de)(de)處(chu)理(li)(li)(li)(li)器,可(ke)以是Controller類或其他處(chu)理(li)(li)(li)(li)組件(jian)。通過委派模式,DispatcherServlet實現了請(qing)求(qiu)的(de)(de)(de)(de)(de)分發和處(chu)理(li)(li)(li)(li)的(de)(de)(de)(de)(de)解耦,具(ju)體(ti)的(de)(de)(de)(de)(de)處(chu)理(li)(li)(li)(li)邏輯(ji)由(you)處(chu)理(li)(li)(li)(li)器負責完成。

DispatcherServlet的(de)(de)(de)配置(zhi)可以在Spring的(de)(de)(de)配置(zhi)文件(jian)(如XML配置(zhi)文件(jian))中進行,指定(ding)URL路徑和對應的(de)(de)(de)處理(li)器(qi)的(de)(de)(de)映(ying)射關系。這樣,根(gen)據不同的(de)(de)(de)URL路徑,DispatcherServlet就能(neng)夠將請求委派給不同的(de)(de)(de)處理(li)器(qi)進行處理(li)。

需要注意的是,DispatcherServlet不僅僅只使用了委派模式,它還涉及其他設計模式和技術,如適配器模式、模板方法模式、策略模式等,以實現全面的請求處理流程和靈活的擴展機制。
回到目錄

posted @ 2023-06-28 10:33  張占嶺  閱讀(459)  評論(0)    收藏  舉報