Adapter Class/Object(适配器)
2024-08-24 21:53:23
意图:
将一个类的接口转换成客户希望的另外一个接口。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()
最新文章
- 单机静默安装GI软件并创建ASM实例和ASM磁盘组
- 关于#define预处理指令的一个问题
- JS调用本地应用程序
- CodeForces 173B Chamber of Secrets spfa
- app后端设计--总目录
- java面向对象之 类和对象
- SQL 教程
- selenium+python等待时间
- 通过Excel文件快速创建页面和数据表
- 关于C++ return * this
- Spring _day01_下载、概述、监听器
- 啊哈算法第四章第三节 层层递进-广度优先搜索 java实现
- 使用Selenium模拟浏览器抓取斗鱼直播间信息
- linux nohup命令使程序在后台运行的方法
- windows平台使用spark-submit以client方式提交spark应用到standalone集群
- Java学习之路(六):集合
- highcharts配置的效果如下
- 8月自动化测试课程 - Selenium开源自动化测试实践
- div+css实现双飞翼布局
- ubuntu16.04 使用问题笔记