意图:

将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适用性:

你想使用一个已经存在的类,而它的接口不符合你的需求。

你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。

(仅适用于对象Adapter )你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

#!/usr/bin/python
#coding:utf8
'''
Adapter
''' import os class Dog(object):
def __init__(self):
self.name = "Dog" def bark(self):
return "woof!" class Cat(object):
def __init__(self):
self.name = "Cat" def meow(self):
return "meow!" class Human(object):
def __init__(self):
self.name = "Human" def speak(self):
return "'hello'" class Car(object):
def __init__(self):
self.name = "Car" def make_noise(self, octane_level):
return "vroom%s" % ("!" * octane_level) class Adapter(object):
"""
Adapts an object by replacing methods.
Usage:
dog = Dog
dog = Adapter(dog, dict(make_noise=dog.bark))
"""
def __init__(self, obj, adapted_methods):
"""We set the adapted methods in the object's dict"""
self.obj = obj
self.__dict__.update(adapted_methods) def __getattr__(self, attr):
"""All non-adapted calls are passed to the object"""
return getattr(self.obj, attr) def main():
objects = []
dog = Dog()
objects.append(Adapter(dog, dict(make_noise=dog.bark)))
cat = Cat()
objects.append(Adapter(cat, dict(make_noise=cat.meow)))
human = Human()
objects.append(Adapter(human, dict(make_noise=human.speak)))
car = Car()
car_noise = lambda: car.make_noise(3)
objects.append(Adapter(car, dict(make_noise=car_noise))) for obj in objects:
print "A", obj.name, "goes", obj.make_noise() if __name__ == "__main__":
main()

最新文章

  1. 单机静默安装GI软件并创建ASM实例和ASM磁盘组
  2. 关于#define预处理指令的一个问题
  3. JS调用本地应用程序
  4. CodeForces 173B Chamber of Secrets spfa
  5. app后端设计--总目录
  6. java面向对象之 类和对象
  7. SQL 教程
  8. selenium+python等待时间
  9. 通过Excel文件快速创建页面和数据表
  10. 关于C++ return * this
  11. Spring _day01_下载、概述、监听器
  12. 啊哈算法第四章第三节 层层递进-广度优先搜索 java实现
  13. 使用Selenium模拟浏览器抓取斗鱼直播间信息
  14. linux nohup命令使程序在后台运行的方法
  15. windows平台使用spark-submit以client方式提交spark应用到standalone集群
  16. Java学习之路(六):集合
  17. highcharts配置的效果如下
  18. 8月自动化测试课程 - Selenium开源自动化测试实践
  19. div+css实现双飞翼布局
  20. ubuntu16.04 使用问题笔记

热门文章

  1. 线段树(成段更新,区间求和lazy操作 )
  2. python通过os.walk() 遍历出多级目录下所有文件绝对路径
  3. EA类图与代码同步
  4. centos7 python3 安装
  5. sql server 2008维护计划配置
  6. js-jquery-SweetAlert2【二】配置与方法
  7. Mysql学习笔记—concat以及group_concat的用法(转载)
  8. [随感]GIS开发的困惑
  9. tcp/udp/socket 端口映射,转发小工具
  10. 嵌入式linux内核制作、根文件系统制作