適配器模式:將一個類的介面轉換成客戶希望的另外一個介面。使得原本由於介面不相容而不能一起工作的那些類可以一起工作。
應用情境:希望複用一些現存的類,但是介面又與複用環境要求不一致。
分類:類適配器(通過多重繼承)、對象適配器。
#encoding=utf-8##by panda#適配器模式def printInfo(info): print unicode(info, 'utf-8').encode('gbk')#球員類class Player(): name = '' def __init__(self,name): self.name = name def Attack(self,name): pass def Defense(self): pass #前鋒class Forwards(Player): def __init__(self,name): Player.__init__(self,name) def Attack(self): printInfo("前鋒%s 進攻" % self.name) def Defense(self,name): printInfo("前鋒%s 防守" % self.name)#中鋒(目標類)class Center(Player): def __init__(self,name): Player.__init__(self,name) def Attack(self): printInfo("中鋒%s 進攻" % self.name) def Defense(self): printInfo("中鋒%s 防守" % self.name) #後衛class Guards(Player): def __init__(self,name): Player.__init__(self,name) def Attack(self): printInfo("後衛%s 進攻" % self.name) def Defense(self): printInfo("後衛%s 防守" % self.name) #外籍中鋒(待適配類)#中鋒class ForeignCenter(Player): name = '' def __init__(self,name): Player.__init__(self,name) def ForeignAttack(self): printInfo("外籍中鋒%s 進攻" % self.name) def ForeignDefense(self): printInfo("外籍中鋒%s 防守" % self.name)#翻譯(適配類)class Translator(Player): foreignCenter = None def __init__(self,name): self.foreignCenter = ForeignCenter(name) def Attack(self): self.foreignCenter.ForeignAttack() def Defense(self): self.foreignCenter.ForeignDefense()def clientUI(): b = Forwards('巴蒂爾') m = Guards('麥克格雷迪') ym = Translator('姚明') b.Attack() m.Defense() ym.Attack() ym.Defense() returnif __name__ == '__main__': clientUI();
類圖: