外觀(Facade)模式:為子系統中的一組介面提供一個一致的介面。
——此模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。
與其它模式的區別:與 “簡單原廠模式+策略模式”的組合版 很類似,不過外觀類的介面不是簡單的調用功能類的相應介面,而是封裝成了新的介面。
使用情境:維護一個遺留的大型系統是,可能這個系統已經非常難以維護和擴充,但是它包含很重要的功能,新的開發必須依賴於它,這樣增加外觀Facade類,為系統封裝一個比較清晰簡單的介面,讓新系統與Facade對象互動,Facade與遺留代碼互動所有複雜的工作
#encoding=utf-8##by panda#面板模式(Facade)def printInfo(info): print unicode(info, 'utf-8').encode('gbk') class Stock1(): name = '股票1' def buy(self): printInfo('買 '+self.name) def sell(self): printInfo('賣 '+self.name) class Stock2(): name = '股票2' def buy(self): printInfo('買 '+self.name) def sell(self): printInfo('賣 '+self.name)class NationDebt1(): name = '國債1' def buy(self): printInfo('買 '+self.name) def sell(self): printInfo('賣 '+self.name)class Realty1(): name = '房地產1' def buy(self): printInfo('買 '+self.name) def sell(self): printInfo('賣 '+self.name)#基金class Fund(): gu1 = None gu2 = None nd1 = None rt1 = None def __init__(self): self.gu1 = Stock1() self.gu2 = Stock2() self.nd1 = NationDebt1() self.rt1 = Realty1() def buyFund(self): self.gu1.buy() self.gu2.buy() self.nd1.buy() self.rt1.buy() def sellFund(self): self.gu1.sell() self.gu2.sell() self.nd1.sell() self.rt1.sell() def clientUI(): myFund = Fund() myFund.buyFund() myFund.sellFund() returnif __name__ == '__main__': clientUI();
類圖: