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 的 with 语句详解
Jun 13 Python
在Django同1个页面中的多表单处理详解
Jan 25 Python
Python中is和==的区别详解
Nov 15 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
Oct 24 Python
python 协程 gevent原理与用法分析
Nov 22 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
改变 Python 中线程执行顺序的方法
Sep 24 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
Oct 15 Python
Python和Bash结合在一起的方法
Nov 13 Python
python中scrapy处理项目数据的实例分析
Nov 22 Python
pyx文件 生成pyd 文件用于 cython调用的实现
Mar 04 Python
如何判断pytorch是否支持GPU加速
Jun 01 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三层结构(上) 简单三层结构
2010/07/04 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
php三元运算符知识汇总
2015/07/02 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
[02:22]2018DOTA2亚洲邀请赛VG赛前采访
2018/04/03 DOTA
pyqt和pyside开发图形化界面
2014/01/22 Python
python3中函数参数的四种简单用法
2018/07/09 Python
对pandas写入读取h5文件的方法详解
2018/12/28 Python
Python基于plotly模块实现的画图操作示例
2019/01/23 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
人事部主管岗位职责
2013/12/26 职场文书
技术合作协议书范本
2014/04/18 职场文书
计算机网络专业求职信
2014/06/05 职场文书
感谢信的格式
2015/01/21 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
nginx如何将http访问的网站改成https访问
2021/03/31 Servers
Python快速优雅的批量修改Word文档样式
2021/05/20 Python