外觀模式 facade

2021-08-27 16:56:57 字數 2077 閱讀 8386

什麼是facade模式?

外觀模式為子系統中的各類(或結構與方法)提供乙個簡明一致的介面,隱藏子系統的複雜性,使子系統更加容易使用。既當子系統複雜或者繁瑣時,我們讓子系統提供乙個視窗,程式中稱為介面,其它程式或者物件就通過這個視窗(介面)與此子系統聯絡。介面可以是類或方法等。這樣就簡化了子系統的使用。

作用是什麼?

簡化子系統的使用。

如何實現?

當子系統(或物件)使用很複雜時,我們建立乙個介面(視窗)物件,將子系統的複雜的使用方法寫在此物件中,其他物件或程式通過呼叫此介面(視窗)來使用系統。

即在其它物件或程式中加了一層,此層用於呼叫子系統。而其它物件使用此層來呼叫子系統,而不管此層怎樣呼叫子系統。

facade模式解說

我們平時的開發中其實已經不知不覺的在用façade

模式,現在來考慮這樣乙個抵押系統,當有乙個客戶來時,有如下幾件事情需要確認:到銀行子系統查詢他是否有足夠多的存款,到信用子系統查詢他是否有良好的信用,到貸款子系統查詢他有無貸款劣跡。只有這三個子系統都通過時才可進行抵押。我們先不考慮

façade

模式,那麼客戶程式就要直接訪問這些子系統,分別進行判斷。類結構圖下: 圖3

在這個程式中,我們首先要有乙個顧客類,它是乙個純資料類,並無任何操作,示意**:

//顧客類

public

class

customer

public

string

name}}

下面這三個類均是子系統類,示意**:

//銀行子系統

public

class

bank

}//信用子系統

public

class

credit

}//貸款子系統

public

class

loan}

來看客戶程式的呼叫:

//客戶程式

public

class

else

if(!loan.hasnobadloans(customer))

else

if(!credit.hasgoodcredit(customer))

console.writeline("\n"

+customer.name+

"hasbeen"

+(eligible?

console.readline();}}

可以看到,在不用façade模式的情況下,客戶程式與三個子系統都發生了耦合,這種耦合使得客戶程式依賴於子系統,當子系統變化時,客戶程式也將面臨很多變化的挑戰。乙個合情合理的設計就是為這些子系統建立乙個統一的介面,這個介面簡化了客戶程式的判斷操作。看一下引入

façade

模式後的類結構圖: 圖4

門面類mortage

的實現如下:

//外觀類

public

class

mortgage

else

if(!loan.hasnobadloans(cust))

else

if(!credit.hasgoodcredit(cust))

return

eligible;}}

顧客類和子系統類的實現仍然如下:

//銀行子系統

public

class

bank

}//信用證子系統

public

class

credit

}//貸款子系統

public

class

loan

}//顧客類

public

class

customer

public

string

name}}

而此時客戶程式的實現:

//客戶程式類

public

class}

可以看到引入façade模式後,客戶程式只與

mortgage

發生依賴,也就是

mortgage

遮蔽了子系統之間的複雜的操作,達到了解耦內部子系統與客戶程式之間的依賴

外觀模式(Facade)

外觀模式的定義是,為子系統中的一組介面提供乙個一致的inte ce介面介面。外觀模式是個很簡單,但很重要的模式,它主要思想是將表現層和邏輯層隔離,封裝底層的複雜處理,只為使用者提供簡單的介面,這樣的例子隨處可見。外觀模式也叫門面模式,它很多時候更是一種系統架構的設計,在我所做的專案中,就實現了門面模...

Facade外觀模式

facade外觀模式,是一種結構型模式,它主要解決的問題是 元件的客戶和元件中各種複雜的子系統有了過多的耦合,隨著外部客戶程式和各子系統的演化,這種過多的耦合面臨很多變化的挑戰。facade設計模式更注重從架構的層次去看整個系統,而不是單個類的層次。facade外觀模式,是一種結構型模式,它主要解決...

Facade外觀模式

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