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实现多线程采集的2个代码例子
Jul 07 Python
python如何获取服务器硬件信息
May 11 Python
用python结合jieba和wordcloud实现词云效果
Sep 05 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
Pandas透视表(pivot_table)详解
Jul 22 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
python 利用turtle模块画出没有角的方格
Nov 23 Python
Python用户自定义异常的实现
Dec 25 Python
详解python第三方库的安装、PyInstaller库、random库
Mar 03 Python
利用Python网络爬虫爬取各大音乐评论的代码
Apr 13 Python
Python Socket编程详解
Apr 25 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
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
PHP include任意文件或URL介绍
2014/04/29 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
举例详解Python中yield生成器的用法
2015/08/05 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
《最大的“书”》教学反思
2014/02/14 职场文书
电子商务实训报告总结
2014/11/05 职场文书
新党章的学习心得体会
2014/11/07 职场文书
放假通知格式
2015/04/14 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python
详解Python中下划线的5种含义
2021/07/15 Python
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python