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判断一个集合是否包含了另外一个集合中所有项的方法
Jun 30 Python
使用Python对SQLite数据库操作
Apr 06 Python
理论讲解python多进程并发编程
Feb 09 Python
python主线程捕获子线程的方法
Jun 17 Python
python中实现字符串翻转的方法
Jul 11 Python
Python3.7实现中控考勤机自动连接
Aug 28 Python
python3 打印输出字典中特定的某个key的方法示例
Jul 06 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
python matplotlib绘制三维图的示例
Sep 24 Python
Python爬虫抓取论坛关键字过程解析
Oct 19 Python
简单谈谈Python面向对象的相关知识
Jun 28 Python
python数字图像处理之图像的批量处理
Jun 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开发中的中文编码问题
2013/08/08 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
vuex页面刷新后数据丢失的方法
2019/01/17 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
python 快速排序代码
2009/11/23 Python
Python Requests安装与简单运用
2016/04/07 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
python求最大值最小值方法总结
2019/06/25 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
在Matplotlib图中插入LaTex公式实例
2020/04/17 Python
高考考python编程是真的吗
2020/07/20 Python
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
美国校服网上商店:French Toast
2019/10/08 全球购物
实现strstr功能,即在父串中寻找子串首次出现的位置
2016/08/05 面试题
幼儿如何来做好自我评价
2013/11/05 职场文书
人力资源专业推荐信
2013/11/29 职场文书
中学运动会广播稿
2014/01/19 职场文书
大学生两会学习心得体会
2014/03/10 职场文书
童年读书笔记
2015/06/26 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书