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中封装GObject模块进行图形化程序编程的教程
Apr 14 Python
Python随机生成带特殊字符的密码
Mar 02 Python
一看就懂得Python的math模块
Oct 21 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
python实现证件照换底功能
Aug 20 Python
python使用matplotlib绘制雷达图
Oct 18 Python
如何基于python生成list的所有的子集
Nov 11 Python
Python requests接口测试实现代码
Sep 08 Python
浅析Python 责任链设计模式
Sep 11 Python
如何利用python发送邮件
Sep 26 Python
Python基于Serializer实现字段验证及序列化
Nov 04 Python
Python如何配置环境变量详解
May 18 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 开源框架22个简单简介
2009/08/24 PHP
PHP数据集构建JSON格式及新数组的方法
2012/11/07 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
使用jQuery获得内容以及内容的属性
2015/02/26 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
js获取地址栏中传递的参数(两种方法)
2017/02/08 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
js实现div色块拖动录制
2020/01/16 Javascript
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
用pycharm开发django项目示例代码
2019/06/13 Python
Python生成器实现简单"生产者消费者"模型代码实例
2020/03/27 Python
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
MYPROTEIN澳大利亚官方网站:欧洲运动营养品牌
2019/06/26 全球购物
幼儿师范毕业生自荐信
2013/11/09 职场文书
如何做好总经理助理
2013/11/12 职场文书
出纳会计岗位职责
2014/03/12 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
2014年文秘工作总结
2014/11/25 职场文书
2016新年慰问信范文
2015/03/25 职场文书
调解协议书范本
2016/03/21 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript
MySQL限制查询和数据排序介绍
2022/03/25 MySQL