溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Facade外觀模式怎么實現(xiàn)

發(fā)布時間:2022-03-25 10:46:36 來源:億速云 閱讀:114 作者:iii 欄目:web開發(fā)

本文小編為大家詳細(xì)介紹“Facade外觀模式怎么實現(xiàn)”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Facade外觀模式怎么實現(xiàn)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

Facade(外觀模式)

Facade(外觀模式)屬于結(jié)構(gòu)型模式,是一種日常開發(fā)中經(jīng)常被使用到的設(shè)計模式。

意圖:為子系統(tǒng)中的一組接口提供一個一致的界面,F(xiàn)acade 模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。

舉例子

如果看不懂上面的意圖介紹,沒有關(guān)系,設(shè)計模式需要在日常工作里用起來,結(jié)合例子可以加深你的理解,下面我準(zhǔn)備了三個例子,讓你體會什么場景下會用到這種設(shè)計模式。

意圖解釋

圖書管理員

圖書館是一個非常復(fù)雜的系統(tǒng),雖然圖書按照一定規(guī)則擺放,但也只有內(nèi)部人員比較清楚,作為一位初次來的訪客,想要快速找到一本書,最好的辦法是直接問圖書管理員,而不是先了解這個圖書館的設(shè)計,因為你可能要來回在各個樓宇間奔走,借書的流程可能也比較長。

圖書管理員就起到了簡化圖書館子系統(tǒng)復(fù)雜度的作用,我們只要凡事詢問圖書管理員即可,而不需要關(guān)心他是如何與圖書館內(nèi)部系統(tǒng)打交道的。

最多跑一次便民服務(wù)

浙江省推出的最多跑一次服務(wù)非常方便,很多辦事流程都簡化了,無論是證件辦理還是業(yè)務(wù)受理,幾乎只要跑一次,而必須要持續(xù)幾天的流程也會通過手機(jī)短信或者 App 操作完成后續(xù)流程。

這就相當(dāng)于外觀模式,因為政府系統(tǒng)內(nèi)部的辦事流程可能沒有太大變化,但通過抽象出 Facade(外觀),讓普通市民可以直接與便民辦事處連接,而不需要在車管所與駕校之間來回奔波,背后的事情沒有少,只是便民辦事處幫你做了。

Iphone 快捷指令功能

手機(jī)的 App 非常多,而我們需要了解每個功能在哪個 App 上才能運(yùn)用自如,而快捷指令功能可以將 App 的某些功能單獨(dú)提取出來,形成一套新的功能組,我們可以只接觸到 “拍照” “付款” “計算”,而不用管背后是調(diào)用了支付寶還是微信、系統(tǒng)內(nèi)置攝像機(jī)還是其他攝像 App,也不用關(guān)心這個 App 內(nèi)部功能的入口在哪里,這些對接都在快接指令中自動完成。

快捷指令也是一種外觀模式。

意圖解釋

意圖:為子系統(tǒng)中的一組接口提供一個一致的界面,F(xiàn)acade 模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。

為降低一個擁有多個接口的子系統(tǒng)內(nèi)部復(fù)雜性,我們需要一個外觀來屏蔽內(nèi)部的復(fù)雜性,因此外觀模式就是定義一個高層接口,這個接口直連子系統(tǒng)的內(nèi)部實現(xiàn),但調(diào)用這個高層接口的人不需要關(guān)心子系統(tǒng)內(nèi)部的實現(xiàn),這樣,對于不想了解子系統(tǒng)內(nèi)部實現(xiàn)的人來說,提高了易用度。

當(dāng)然如果想要深度定制,就可以繞過外觀模式,直接使用子系統(tǒng)提供的類,所以說并不是有了外觀模式就必須通過外觀調(diào)用,而是根據(jù)實際需要判斷使用哪種調(diào)用方式。

結(jié)構(gòu)圖

可以看到,F(xiàn)acade 直接指向子系統(tǒng)中的類,而子系統(tǒng)的類不會反向指向 Facade。

代碼例子

下面例子使用 typescript 編寫。

// 假設(shè)一個子系統(tǒng)是三個類結(jié)合使用的,為了抽象而解耦開了

class A {

  constructor(b: B) {

    this.b = b

  }

}

class B {

  constructor(c: C) {

    this.c = c

  }

}

class C {

}

// 它們組合成了一種常用功能,我們可以使用外觀模式屏蔽子類的細(xì)節(jié)直接使用

class Compile {

  public run() {

    const parser = new A(new B(new C))

    parser.run()

  }

}

const compile = new Compile()

compile.run()

這樣我們只要知道 Compile 類就可以了,而不需要了解背后的 A B C 以及其組合關(guān)系。

弊端

外觀模式并不適合于所有場景,當(dāng)子系統(tǒng)足夠易用時,再使用外觀模式就是畫蛇添足。

另外,當(dāng)系統(tǒng)難以抽象出通用功能時,外觀模式的設(shè)計可能也無所適從,因為設(shè)計的高層接口可能適用范圍很窄,此時外觀模式的意義就比較小。

讀到這里,這篇“Facade外觀模式怎么實現(xiàn)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI