Typescript代理設(shè)計(jì)模式(模擬Android系統(tǒng)服務(wù)獲?。?/h2>
proxy.png

環(huán)境:Webstorm
語(yǔ)言:Typescript


proxy-mini.png

代理設(shè)計(jì)模式所屬類型:結(jié)構(gòu)模式

代碼直觀感受:對(duì)一個(gè)對(duì)象進(jìn)行一層封裝,套一層。

優(yōu)缺點(diǎn),看看優(yōu)缺點(diǎn)聯(lián)想使用場(chǎng)景

優(yōu)點(diǎn) 缺點(diǎn)
提供上層訪問(wèn),隱藏具體實(shí)現(xiàn) 代碼會(huì)變復(fù)雜,因?yàn)橛锌赡艽嬖诙鄬忧短状?/td>
對(duì)代理的真實(shí)對(duì)象進(jìn)行管理
當(dāng)真實(shí)的對(duì)象不可用時(shí),代理對(duì)象可以進(jìn)行快速響應(yīng)
開閉原則,可以替換真實(shí)對(duì)象

具體實(shí)現(xiàn):

/**
 * 使用Typescript模擬一個(gè)簡(jiǎn)單的Android ActivityManager代理設(shè)計(jì)模式
 */
interface ActivityManager {

    getService():void;
}

class ActivityManagerService implements ActivityManager {

    getService(): void {

    }

}


class ActivityManagerServiceStub implements ActivityManager{

    getService(): void {
        console.log('真正對(duì)象的操作=>獲取到了電量管理服務(wù)實(shí)例??!')
    }

}


class ActivityManagerServiceProxy implements ActivityManager{

    //真正代理的對(duì)象
    private realObject: ActivityManager;

    //構(gòu)造方法傳遞需要代理的對(duì)象
    constructor(activityManager:ActivityManager) {
        this.realObject = activityManager;
    }

    getService(): void {
        if (this.checktoken()) {
            this.realObject.getService();
            this.recordAction();
        }
    }

    private checktoken():boolean{
        console.log('來(lái)自代理的操作=>校驗(yàn)當(dāng)前的Token是否正確');
        return true;
    }

    private recordAction(){
        console.log('來(lái)自代理的操作=>獲取服務(wù)完成以后進(jìn)行一些記錄操作');
    }
}

//創(chuàng)建ActivityManagerServiceStub存根對(duì)象,并添加到代理中
const mActivityManagerServiceProxy = new ActivityManagerServiceProxy(new ActivityManagerServiceStub());
//開始獲取服務(wù)
mActivityManagerServiceProxy.getService();

輸出控制臺(tái)

C:\Users\Aniu\Desktop\github_advanced>node Proxy.js
來(lái)自代理的操作=>校驗(yàn)當(dāng)前的Token是否正確
真正對(duì)象的操作=>獲取到了電量管理服務(wù)實(shí)例?。?來(lái)自代理的操作=>獲取服務(wù)完成以后進(jìn)行一些記錄操作

外觀設(shè)計(jì)模式VS代理設(shè)計(jì)模式

外觀設(shè)計(jì)模式與代理設(shè)計(jì)有相似之處,區(qū)別就是外觀設(shè)計(jì)模式它與真實(shí)對(duì)象沒(méi)有一樣的實(shí)現(xiàn)接口,所以也可聯(lián)想到,外觀真正代理的對(duì)象是沒(méi)有辦法進(jìn)行替換的,更多的是用來(lái)做資源整合,整合多個(gè)對(duì)象的功能,比如有兩個(gè)真實(shí)對(duì)象的功能需要進(jìn)行配合整合,那么就適合使用外觀設(shè)計(jì)模式,外觀設(shè)計(jì)模式與功能的定義單純從名字上來(lái)看是不太易于理解的,但是只要我聯(lián)想到幾個(gè)模塊是平級(jí)的,需要聯(lián)合使用,我就會(huì)想到使用外觀模式進(jìn)行資源整合管理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,689評(píng)論 1 32
  • javascript設(shè)計(jì)模式與開發(fā)實(shí)踐 設(shè)計(jì)模式 每個(gè)設(shè)計(jì)模式我們需要從三點(diǎn)問(wèn)題入手: 定義 作用 用法與實(shí)現(xiàn) 單...
    穿牛仔褲的蚊子閱讀 4,503評(píng)論 0 13
  • 數(shù)據(jù)下載 sra下載ncbi數(shù)據(jù) star 比對(duì) star軟件的簡(jiǎn)單使用star官方文檔 gatk流程
    昌平厄齊爾閱讀 186評(píng)論 0 0
  • 姓名:周玉霞 六項(xiàng)精進(jìn):327期學(xué)員 公司:溫州易道偉業(yè)企業(yè)管理咨詢有限公司 地點(diǎn):河南省洛陽(yáng)市汝陽(yáng)縣 【日精進(jìn)打...
    Anne玉閱讀 164評(píng)論 0 0

友情鏈接更多精彩內(nèi)容