設計模式(十)之Facade 外觀模式

2021-05-21 19:29:38 字數 1547 閱讀 5486

本文介紹設計模式中的外觀(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)

gof 設計模式 一書對facade模式是這樣描述的 為子系統中的一組介面提供乙個統一介面。facade模式定義了乙個更高層的介面,使子系統更加容易使用。大致意思是說 使用一種比原有方式更簡單的辦法與系統互動。例如,我們把乙個很檔案的檔案,放在了第二抽屜裡,而第二個抽屜的鑰匙放在了第乙個抽屜裡,我們...

設計模式之Facade 外觀

facade 的定義 為子系統中的一組介面提供乙個一致的介面。facade 乙個典型應用就是資料庫 jdbc 的應用 如下例對資料庫的操作 public class dbcompare catch ception e finally 上例是 jsp 中最通常的對資料庫操作辦法。在應用中 經常需要對資...

設計模式之Facade 外觀

為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。何時使用外觀模式?這要分三個階段來說,首先,在設計初期階段,應該要有意識的將不同的兩個層分離,比如經典的三層構架,就需要考慮在資料訪問層和業務邏輯層,業務邏輯層和表示層的層與層之間建立外觀fa ad...