設計模式之外觀模式

2021-06-23 04:55:17 字數 3334 閱讀 8039

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。在開發階段,子系統往往因不斷的重構演化而變得越來越複雜,增加外觀模式可以提供乙個簡單的...