Python设计模式编程中Adapter适配器模式的使用实例


Posted in Python onMarch 02, 2016

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

模式特点:将一个类的接口转换成为客户希望的另外一个接口。

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

来通过例子说明,下面是用户通过适配器使用一个类的方法

class Target:
 def Request():
  print "common request."

class Adaptee(Target):
 def SpecificRequest(self):
  print "specific request."

class Adapter(Target):
 def __init__(self,ada):
  self.adaptee = ada
 def Request(self):
  self.adaptee.SpecificRequest()

if __name__ == "__main__":
 adaptee = Adaptee()
 adapter = Adapter(adaptee)
 adapter.Request()

类图:

Python设计模式编程中Adapter适配器模式的使用实例

实例:
我们再来看一个简单的Adapter例子

#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() 
 return 
 
if __name__ == '__main__': 
 clientUI();
Python 相关文章推荐
python实现定制交互式命令行的方法
Jul 03 Python
Python可跨平台实现获取按键的方法
Mar 05 Python
Python易忽视知识点小结
May 25 Python
Python 正则表达式的高级用法
Dec 04 Python
Python高斯消除矩阵
Jan 02 Python
Python button选取本地图片并显示的实例
Jun 13 Python
python requests更换代理适用于IP频率限制的方法
Aug 21 Python
pygame库实现俄罗斯方块小游戏
Oct 29 Python
Pytorch根据layers的name冻结训练方式
Jan 06 Python
python画环形图的方法
Mar 25 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
Python接口自动化测试的实现
Aug 28 Python
Python打造出适合自己的定制化Eclipse IDE
Mar 02 #Python
设计模式中的原型模式在Python程序中的应用示例
Mar 02 #Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 #Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
Mar 02 #Python
实例讲解Python设计模式编程之工厂方法模式的使用
Mar 02 #Python
详解设计模式中的工厂方法模式在Python程序中的运用
Mar 02 #Python
探究python中open函数的使用
Mar 01 #Python
You might like
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
JavaScript 动态创建VML的方法
2009/10/14 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
2013/08/25 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
javascript中Object使用详解
2015/01/26 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
JavaScript中的 new 命令
2019/05/22 Javascript
js实现轮播图特效
2020/05/28 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
python基础练习之几个简单的游戏
2017/11/10 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
有趣的睡衣和礼物:LazyOne
2019/11/27 全球购物
信息专业本科生个人的自我评价
2013/10/28 职场文书
应届生服务员求职信
2013/10/31 职场文书
给老师的检讨书
2014/02/11 职场文书
收款委托书范本
2014/09/11 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
搞笑婚前保证书
2015/02/28 职场文书
幼儿园门卫安全责任书
2015/05/08 职场文书
学历证明样本
2015/06/16 职场文书
小学生暑假安全保证书
2015/07/13 职场文书