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 Mysql自动备份脚本
Jul 14 Python
python标准日志模块logging的使用方法
Nov 01 Python
python3库numpy数组属性的查看方法
Apr 17 Python
python3实现爬取淘宝美食代码分享
Sep 23 Python
Python除法之传统除法、Floor除法及真除法实例详解
May 23 Python
python多线程下信号处理程序示例
May 31 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
Python Django 简单分页的实现代码解析
Aug 21 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
python的等深分箱实例
Nov 22 Python
学习Python需要哪些工具
Sep 04 Python
python中最小二乘法详细讲解
Feb 19 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
一个多文件上传的例子(原创)
2006/10/09 PHP
PHP sprintf()函数用例解析
2011/05/18 PHP
PHP中soap的用法实例
2014/10/24 PHP
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
node.js中的querystring.escape方法使用说明
2014/12/10 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
理解JS绑定事件
2016/01/19 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
2017/11/28 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
2019/09/05 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
[01:05:07]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第一场2月1日
2021/03/11 DOTA
利用Python获取操作系统信息实例
2016/09/02 Python
python 第三方库的安装及pip的使用详解
2017/05/11 Python
Python简单计算数组元素平均值的方法示例
2017/12/26 Python
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
django js实现部分页面刷新的示例代码
2018/05/28 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
2019/10/22 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
Django Xadmin多对多字段过滤实例
2020/04/07 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
Weblogic和WebSphere不同特点
2012/05/09 面试题
小学生手册家长评语
2014/04/16 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
2014年个人委托书范本
2014/10/13 职场文书
租房协议书范例
2014/10/14 职场文书
Python3 如何开启自带http服务
2021/05/18 Python
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技