python设计模式之适配器
来源:互联网 发布:mysql union or in 编辑:程序博客网 时间:2024/06/05 08:56
python设计模式之适配器
意图
- 将一个类的接口转换成客户希望的另外一个接口, Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
适用性
- 你想使用一个已经存在的类,而它的接口不符合你的需求
- 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作
- 你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口
例子
# -*- coding:utf-8 -*-__author__ = 'Ricky'class Dog(object): def __init__(self): self.name = "Dog" def bark(self): return "woof!"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): """设置适配器对象和方法""" self.obj = obj # 可以对不兼容的adapted_methods方法进行加工改造 self.__dict__.update(adapted_methods) def __getattr__(self, attr): """获取指定对象""" return getattr(self.obj, attr)def main(): objects = [] dog = Dog() # 传入make_noise方法,使得适配器类得以通过make_noise方法来调用 objects.append(Adapter(dog, dict(make_noise=dog.bark))) 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()output:A Dog goes woof!A Car goes vroom!!!
阅读全文
0 0
- python设计模式之适配器
- Python设计模式-适配器模式
- python设计模式(适配器模式)
- Python设计模式--适配器模式
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式 之 适配器
- 设计模式 之 适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- Python的结构型设计模式之适配器模式
- 设计模式之适配器-Adapter--适配器模式
- 设计模式之适配器设计
- linux开机启动程序
- Git基本操作
- js字符串函数
- 201703-1 分蛋糕
- redis主从复制失败的坑
- python设计模式之适配器
- Mysql数据类型---TIMESTAMP
- 51Nod-1185-威佐夫游戏 V2
- 成为优秀Java程序员的10个要点
- 字符串查找并替换
- Mysql数据类型---INTEGER
- hdu1532 Drainage Ditches(E-K最大流)
- JAVA学习笔记-JAVA用JDBC连接MySQL
- 我自己总结的MySQL使用中的常见问题(更新至20170907)