1、為了系統中一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。
uml圖如下:
2、如何使用外觀模式?
這要分三個階段來說,首先,在設計初期階段,應該要有意識的將不同的兩個層分離,比如經典的三層架構,就需要考慮在資料訪問層和業務邏輯層,業務邏輯層和表示層的層與層之間建立外觀facade,這樣可以為複雜的子系統提供乙個簡單的介面,使得耦合大大降低。
其次,在開發階段,子系統往往因為不斷的重構演化而變得越來越複雜,大多數的模式使用時也都會產生很多的小類,這本書好事,但是也給外部呼叫它們的使用者程式帶來使用上的困難,增加外觀facade可以提供乙個簡單的介面,減少它們之間的依賴。
第三,在維護乙個遺留的大型系統時,可能這個系統已經非常難以維護和擴充套件,但因為它包含非常重要的功能新的需求開發必須要依賴它。此時用外觀模式
也是非常合適的。你可以為新系統開發乙個外觀facade類,來提供設計粗糙或高度複雜的遺留**的比較清晰簡單的介面,讓新系統與facade物件互動,facade與遺留**互動所有複雜的工作。 協作
----客戶程式通過傳送請求給facade的方式與子系統通訊,facade將這些訊息**給適當的子系統物件。儘管是子系統中的有關物件在做實際工作,但facade模式本身也必須將它的介面轉換成子系統的介面。
----使用facade的客戶程式不需要直接訪問子系統物件。
c++ code 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include
using
namespace std;
class systemone
};
class systemtwo
};
class systemthree
};
class systemfour
};
//外觀類
class facade
void methodb()
};
int main()
外觀模式應該是用的很多的一種模式,特別是當乙個系統很複雜時,系統提供給客戶的是乙個簡單的對外介面,而把裡面複雜的結構都封裝了起來。客戶只需使用這些簡單介面就能使用這個系統,而不需要關注內部複雜的結構。
dp一書的定義:為子系統中的一組介面提供乙個一致的介面, 外觀模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。舉個編譯器的例子,假設編譯乙個程式需要經過四個步驟:詞法分析、語法分析、中間**生成、機器碼生成。學過編譯都知道,每一步都很複雜。對於編譯器這個系統,就可以使用外觀模式。
可以定義乙個高層介面,比如名為compiler的類,裡面有乙個名為run的函式。客戶只需呼叫這個函式就可以編譯程式,至於run函式內部的具體操作,客戶無需知道。
下面給出uml圖,以編譯器為例項。
相應的**實現為:
[cpp]view plain
copy
class
scanner
; class
parser
; class
genmidcode
; class
genmachinecode
; //高層介面
class
compiler
};
客戶使用方式:
[cpp]view plain
copy
intmain()
這就是外觀模式,它有幾個特點(摘自dp一書),(1)它對客戶遮蔽子系統元件,因而減少了客戶處理的物件的數目並使得子系統使用起來更加方便。(2)它實現了子系統與客戶之間的松耦合關係,而子系統內部的功能元件往往是緊耦合的。(3)如果應用需要,它並不限制它們使用子系統類。
結合上面編譯器這個例子,進一步說明。對於(1),編譯器類對客戶遮蔽了子系統元件,客戶只需處理編譯器的物件就可以方便的使用子系統。對於(2),子系統的變化,不會影響到客戶的使用,體現了子系統與客戶的松耦合關係。對於(3),如果客戶希望使用詞法分析器,只需定義詞法分析的類物件即可,並不受到限制。
設計模式之外觀模式
外觀模式提供了乙個統一的介面,用來訪問子系統中的一群介面。這樣可以避免客戶端和子系統之間的緊耦合。這種模式需要將一系列的子系統組合到外觀中,然後將具體的工作交給各個子系統去完成。如此一來,可以簡化介面的呼叫。其本質就是將系統與客戶端互動的地方封裝起來。這個模式,總體來說,很簡單,理解起來也不困難。依...
設計模式之外觀模式
外觀模式 為子系統中的一組介面提供乙個一直的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。即通過乙個中類來完成客戶端的請求。拿機房收費系統的上機過程來說,上機需要顯示上機者的資訊,填寫上機狀態表,填寫上機記錄表。而使用者不需要知道這些功能是怎麼實現的,只需要通過介面操作就可以完...
設計模式之外觀模式
外觀模式,為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。在設計初期階段,應該要有意識的將不同的兩個層分離,比如經典的三層架構,層與層之間建立外觀facade。在開發階段,子系統往往因不斷的重構演化而變得越來越複雜,增加外觀模式可以提供乙個簡單的...