您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Facade外觀模式怎么實現”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Facade外觀模式怎么實現”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
Facade(外觀模式)
Facade(外觀模式)屬于結構型模式,是一種日常開發中經常被使用到的設計模式。
意圖:為子系統中的一組接口提供一個一致的界面,Facade 模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
舉例子
如果看不懂上面的意圖介紹,沒有關系,設計模式需要在日常工作里用起來,結合例子可以加深你的理解,下面我準備了三個例子,讓你體會什么場景下會用到這種設計模式。
意圖解釋
圖書管理員
圖書館是一個非常復雜的系統,雖然圖書按照一定規則擺放,但也只有內部人員比較清楚,作為一位初次來的訪客,想要快速找到一本書,最好的辦法是直接問圖書管理員,而不是先了解這個圖書館的設計,因為你可能要來回在各個樓宇間奔走,借書的流程可能也比較長。
圖書管理員就起到了簡化圖書館子系統復雜度的作用,我們只要凡事詢問圖書管理員即可,而不需要關心他是如何與圖書館內部系統打交道的。
最多跑一次便民服務
浙江省推出的最多跑一次服務非常方便,很多辦事流程都簡化了,無論是證件辦理還是業務受理,幾乎只要跑一次,而必須要持續幾天的流程也會通過手機短信或者 App 操作完成后續流程。
這就相當于外觀模式,因為政府系統內部的辦事流程可能沒有太大變化,但通過抽象出 Facade(外觀),讓普通市民可以直接與便民辦事處連接,而不需要在車管所與駕校之間來回奔波,背后的事情沒有少,只是便民辦事處幫你做了。
Iphone 快捷指令功能
手機的 App 非常多,而我們需要了解每個功能在哪個 App 上才能運用自如,而快捷指令功能可以將 App 的某些功能單獨提取出來,形成一套新的功能組,我們可以只接觸到 “拍照” “付款” “計算”,而不用管背后是調用了支付寶還是微信、系統內置攝像機還是其他攝像 App,也不用關心這個 App 內部功能的入口在哪里,這些對接都在快接指令中自動完成。
快捷指令也是一種外觀模式。
意圖解釋
意圖:為子系統中的一組接口提供一個一致的界面,Facade 模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
為降低一個擁有多個接口的子系統內部復雜性,我們需要一個外觀來屏蔽內部的復雜性,因此外觀模式就是定義一個高層接口,這個接口直連子系統的內部實現,但調用這個高層接口的人不需要關心子系統內部的實現,這樣,對于不想了解子系統內部實現的人來說,提高了易用度。
當然如果想要深度定制,就可以繞過外觀模式,直接使用子系統提供的類,所以說并不是有了外觀模式就必須通過外觀調用,而是根據實際需要判斷使用哪種調用方式。
結構圖
可以看到,Facade 直接指向子系統中的類,而子系統的類不會反向指向 Facade。
代碼例子
下面例子使用 typescript 編寫。
// 假設一個子系統是三個類結合使用的,為了抽象而解耦開了
class A {
constructor(b: B) {
this.b = b
}
}
class B {
constructor(c: C) {
this.c = c
}
}
class C {
}
// 它們組合成了一種常用功能,我們可以使用外觀模式屏蔽子類的細節直接使用
class Compile {
public run() {
const parser = new A(new B(new C))
parser.run()
}
}
const compile = new Compile()
compile.run()
這樣我們只要知道 Compile 類就可以了,而不需要了解背后的 A B C 以及其組合關系。
弊端
外觀模式并不適合于所有場景,當子系統足夠易用時,再使用外觀模式就是畫蛇添足。
另外,當系統難以抽象出通用功能時,外觀模式的設計可能也無所適從,因為設計的高層接口可能適用范圍很窄,此時外觀模式的意義就比較小。
讀到這里,這篇“Facade外觀模式怎么實現”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。