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中的lambda表达式用法详解
Jun 22 Python
python字符串,数值计算
Oct 05 Python
python使用opencv进行人脸识别
Apr 07 Python
pandas系列之DataFrame 行列数据筛选实例
Apr 12 Python
详解如何将python3.6软件的py文件打包成exe程序
Oct 09 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
Python enumerate函数功能与用法示例
Mar 01 Python
详解python爬虫系列之初识爬虫
Apr 06 Python
pytorch 修改预训练model实例
Jan 18 Python
python程序需要编译吗
Jun 19 Python
基于python定位棋子位置及识别棋子颜色
Jul 26 Python
python数字转对应中文的方法总结
Aug 02 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
记录mysql性能查询过程的使用方法
2013/05/02 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
Laravel如何自定义command命令浅析
2019/03/23 PHP
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
实例讲解JavaScript 计时事件
2020/07/04 Javascript
Javascript数组及类数组相关原理详解
2020/10/29 Javascript
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
python使用tornado实现简单爬虫
2018/07/28 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
详解python中的线程与线程池
2019/05/10 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
python+flask编写一个简单的登录接口
2020/11/13 Python
《与朱元思书》的教学反思
2014/04/17 职场文书
小学捐书活动总结
2014/07/05 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
建筑工地文明标语
2014/10/09 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
使用Pytorch训练two-head网络的操作
2021/05/28 Python
Python中递归以及递归遍历目录详解
2021/10/24 Python
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android