您的位置:首页 > 编程语言 > Python开发

python优雅实现适配器

2016-12-10 21:56 417 查看
读了<精通Python设计模式>,根据其中的适配器模式,我给出了一个更为优雅的实现。
#-*- coding: utf-8 -*-
# adapter pattern

class Adapter(object):
'''Adapter class for adapter pattern
adaptee: adapted object
adaptedMethods: dict{known method: adapted method}'''
def __init__(self, adaptee, adaptedMethods={}):
self.adaptee = adaptee
self.adaptedMethods = adaptedMethods

@staticmethod
def adapt(adaptee, **adaptedMethods):
return Adapter(adaptee, adaptedMethods)

def __getattr__(self, method):
# method calls am of adaptee
am = self.adaptedMethods[method]
return getattr(self.adaptee, am)

def __getitem__(self, method):
# which method is adapted by 'method'
return self.adaptedMethods[method]

def lookup(self, method):
# which method of adapter adapts 'method'
for k, v in self.adaptedMethods.items():
if v == method:
return k

class Adaptee:
def __init__(self, v=1):
self.v=1

def get(self):
return self.v

if __name__ == '__main__':
adaptee = Adaptee(1)
adapter = Adapter(adaptee, {'exec':'get'})
print(adapter.exec())
adapter = Adapter.adapt(adaptee, exec='get')
print(adapter.exec())
print(adapter.lookup('get'))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: