外观(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() return if __name__ == '__main__': clientUI();
类图: