什麼是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 ...