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 将字符串转换成字典dict
Mar 24 Python
python生成日历实例解析
Aug 21 Python
介绍Python的Django框架中的静态资源管理器django-pipeline
Apr 25 Python
python简单实例训练(21~30)
Nov 15 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
Python下载网络文本数据到本地内存的四种实现方法示例
Feb 05 Python
Python内置函数reversed()用法分析
Mar 20 Python
基于DataFrame筛选数据与loc的用法详解
May 18 Python
python中对_init_的理解及实例解析
Oct 11 Python
Python字符串的修改方法实例
Dec 19 Python
Python基础之高级变量类型实例详解
Jan 03 Python
django 实现简单的插入视频
Apr 07 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
smarty模板局部缓存方法使用示例
2014/06/17 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
php while循环控制的简单实例
2016/05/30 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
List Installed Hot Fixes
2007/06/12 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
Extjs中ComboBox加载并赋初值的实现方法
2012/03/22 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
2015/12/01 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
浅谈Pytorch中的torch.gather函数的含义
2019/08/18 Python
Python实现数值积分方式
2019/11/20 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
2020/03/23 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
中国高端家电购物商城:顺电
2018/03/04 全球购物
数学兴趣小组活动总结
2014/07/08 职场文书
会计专业自荐书
2014/07/08 职场文书
合作协议书格式
2014/08/19 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
2014年环保工作总结
2014/11/26 职场文书
2015政治思想表现评语
2015/03/25 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书
教师节校长致辞
2015/07/31 职场文书
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android
clear 万能清除浮动(clearfix:after)
2023/05/21 HTML / CSS