zoukankan      html  css  js  c++  java
  • 适配器模式(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();  


    类图

     
  • 相关阅读:
    angularjs中的页面访问权限设置
    Html页面head标签元素的意义和应用场景
    脚本引用中的defer和async的用法和区别
    自适应页面中如何使用雪碧图
    网页颜色分辨测试小游戏的js化辨别及优化
    jQuery1.9及其以上版本中动态元素on绑定事件无效解决方案
    Data URL简介及Data URL的利弊
    浏览器调试:事件定位与源码查找
    简述ES5 ES6
    移动端中pagehide、pageshow的应用
  • 原文地址:https://www.cnblogs.com/lddhbu/p/2908263.html
Copyright © 2011-2022 走看看