Facade設計模式

2021-05-26 11:52:08 字數 1701 閱讀 6446

facade模式也叫外觀模式,是由gof提出的23種設計模式中的一種。facade模式為一組具有類似功能的類群,比如類庫,子系統等等,提供乙個一致的簡單的介面。這個一致的簡單的介面被稱作facade。

本文介紹設計模式中的外觀(facade)模式的概念,用法,以及實際應用中怎麼樣使用facade模式進行開發。

facade模式的概念

facade

模式為一組具有類似功能的類群,比如類庫,子系統等等,提供乙個一致的簡單的介面。這個一致的簡單的介面被稱作facade。

在應用系統中,為了實現某具有複雜功能的模組或子系統等時,往往需要為其設計和實現很多很小的類,也就是說,該模組或子系統是由一組具有類似功能的類群組合而成。這樣一來,怎麼呼叫這些類就成了問題。facade

就是這樣一種模式,設計乙個被稱為facade的類,該類提供乙個簡單的呼叫介面:

- 隱藏具體的實現細節,簡化呼叫關係。

- 使得呼叫方的**更加簡潔明瞭。

- 通過facade,降低外部呼叫類與內部被呼叫類間的耦合程度。

- 可以為每個不同的任務需要,準備經過良好設計的簡易的api。

facade

模式可以用下面的類圖來表示:

[出自:維基百科

wikipedia.org]

facade

為呼叫方定義簡單的呼叫介面。

clients

呼叫者。通過facade介面呼叫提供某功能的內部類群。

packages

功能提供者。指提供功能的類群(模組或子系統)。

facade模式與adapter模式的區別

facade

模式與adapter模式存在著相當的相似之處:為即存的類提供介面統一的介面,以供外部類呼叫。

但facade模式的目的是簡化呼叫關係;adapter模式是為不同的模組/子系統提供乙個統一的介面(支援多型),旨在將乙個或多個已經存在的不統一的介面轉化成為另乙個統一的介面。

舉例說明:

1,adapter模式:

有銀行a系統,銀行b系統,它們具有大致一樣的功能,但它們的對外介面各不一樣。

如果需要在c系統中使用a系統或b系統,為了介面的一致,我們需要在c系統中實現乙個adapter,通過這個adapter提供的介面,我們就可以透明的呼叫銀行a系統的功能、或者銀行b系統的功能了;

2,facade模式:

有銀行a系統,它具有非常複雜的功能,有融資,貸款,存款,取款,信用審查,擔保等等功能,

如果需要在c系統中,只需用到a系統的一部分功能,比如融資,我們就可以為需要用到的融資功能封裝乙個facade,通過這個facade,我們不用管a系統的內部是怎麼實現融資業務的,也不用管信用審查是否通過,是否具有充分的擔保資源等等,大大簡化了客戶端的呼叫。

facade模式的模型:

a系統有a1, a2, a3等類。客戶端需要呼叫a系統的的a1.dosomething1();a2.dosomething2();a3.dosomething3()來完成某功能。

facade

模式的實現模型就是:

a系統:

class a1

class a2

class a3

facade

:public class facade

}test

:public class client

}

facade設計模式

facade 外 觀模式,是一種結構型模式,它主要解決的問題是 元件的客戶和元件中各種複雜的子系統有了過多的耦合,隨著外部客戶程式和各子系統的演化,這種過多的耦合 面臨很多變化的挑戰。在這裡我想舉乙個例子 比如,現在有一輛汽車,我們 客戶程式 要啟動它,那我們就要發動引擎 子系統 1 使四個車輪 子...

Facade 設計模式

目的 解決的問題 客戶端需要乙個簡化的介面來覆蓋複雜的子系統的總體功能。討論facade 設計模式通過乙個單一的介面物件來封裝乙個複雜的子系統。這樣減少了學習子系統複雜的學習曲線。它也實現了不同潛在客戶端的低依賴性和解耦。換句話說,如果facade 是唯一訪問子系統的入口,那麼它將限制一些特性何靈活...

Facade 設計模式

目的 解決的問題 客戶端需要乙個簡化的介面來覆蓋複雜的子系統的總體功能。討論facade 設計模式通過乙個單一的介面物件來封裝乙個複雜的子系統。這樣減少了學習子系統複雜的學習曲線。它也實現了不同潛在客戶端的低依賴性和解耦。換句話說,如果facade 是唯一訪問子系統的入口,那麼它將限制一些特性何靈活...