适配器模式(python)

适配器模式将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
应用场景:希望复用一些现存的类,但是接口又与复用环境要求不一致。

分类:类适配器(通过多重继承)、对象适配器。

[python] view plaincopy
  1. #encoding=utf-8  
  2. #  
  3. #by panda  
  4. #适配器模式  
  5.   
  6.   
  7. def printInfo(info):  
  8.     print unicode(info, 'utf-8').encode('gbk')  
  9.   
  10. #球员类  
  11. class Player():  
  12.     name = ''  
  13.     def __init__(self,name):  
  14.         self.name = name  
  15.       
  16.     def Attack(self,name):  
  17.         pass  
  18.       
  19.     def Defense(self):  
  20.         pass  
  21.       
  22. #前锋  
  23. class Forwards(Player):  
  24.     def __init__(self,name):  
  25.         Player.__init__(self,name)  
  26.       
  27.     def Attack(self):  
  28.         printInfo("前锋%s 进攻" % self.name)  
  29.       
  30.     def Defense(self,name):  
  31.         printInfo("前锋%s 防守" % self.name)  
  32.   
  33. #中锋(目标类)  
  34. class Center(Player):  
  35.    def __init__(self,name):  
  36.        Player.__init__(self,name)  
  37.      
  38.    def Attack(self):  
  39.        printInfo("中锋%s 进攻" % self.name)  
  40.      
  41.    def Defense(self):  
  42.        printInfo("中锋%s 防守" % self.name)  
  43.      
  44. #后卫  
  45. class Guards(Player):  
  46.    def __init__(self,name):  
  47.        Player.__init__(self,name)  
  48.      
  49.    def Attack(self):  
  50.        printInfo("后卫%s 进攻" % self.name)  
  51.      
  52.    def Defense(self):  
  53.        printInfo("后卫%s 防守" % self.name)  
  54.       
  55. #外籍中锋(待适配类)  
  56. #中锋  
  57. class ForeignCenter(Player):  
  58.     name = ''  
  59.     def __init__(self,name):  
  60.         Player.__init__(self,name)  
  61.      
  62.     def ForeignAttack(self):  
  63.         printInfo("外籍中锋%s 进攻" % self.name)  
  64.      
  65.     def ForeignDefense(self):  
  66.         printInfo("外籍中锋%s 防守" % self.name)  
  67.   
  68.   
  69. #翻译(适配类)  
  70. class Translator(Player):  
  71.     foreignCenter = None  
  72.     def __init__(self,name):  
  73.         self.foreignCenter = ForeignCenter(name)  
  74.      
  75.     def Attack(self):  
  76.         self.foreignCenter.ForeignAttack()  
  77.      
  78.     def Defense(self):  
  79.         self.foreignCenter.ForeignDefense()  
  80.   
  81.   
  82. def clientUI():  
  83.     b = Forwards('巴蒂尔')  
  84.     m = Guards('麦克格雷迪')  
  85.     ym = Translator('姚明')  
  86.       
  87.     b.Attack()  
  88.     m.Defense()  
  89.     ym.Attack()  
  90.     ym.Defense()  
  91.     return  
  92.   
  93. if __name__ == '__main__':  
  94.     clientUI();  


类图

 
原文地址:https://www.cnblogs.com/lddhbu/p/2908263.html