适配器:
定义:可使无直接联系的两个接口或者类能一起工作
方法:适配器就相当于在运来的基础上增加一层调用关系(封装)。
其他:实现适配器的方法有很多,比如说继承、多继承。
# 案例1:
import datetime
class AgeCalculator: # 计算年龄的接口
def __init__(self, birthday):
self.year, self.month, self.day = (int(x) for x in birthday.split('-'))
def calculate_age(self, date):
year, month, day = (int(x) for x in date.split('-'))
age = year-self.year
if (month, day) < (self.month, self.day):
age -= 1
return age
class DateAgeAdapter: # 适配器:格式化date,不影响其功能
def _str_date(self, date):
return date.strftime("%Y-%m-%d")
def __init__(self, birthday):
birthday = self._str_date(birthday)
self.calculator = AgeCalculator(birthday)
def get_age(self, date):
date = self._str_date(date)
return self.calculator.calculate_age(date)
# 案例2:使两个不先关的两个类,能一起工作
class Computer:
def __init__(self, name):
self.name = name
def __str__(self):
return 'the {} computer'.format(self.name)
def execute(self):
return 'executes a program'
class Synthesizer:
def __init__(self, name):
self.name = name
def __str__(self):
return 'the {} synthesizer'.format(self.name)
def play(self):
return 'is playing an electronic song'
# 定义适配器来处理
class Adapter:
def __init__(self, obj, adapted_methods):
self.obj = obj
self.name = obj.name # 处理类里面的属性
self.__dict__.update(adapted_methods) # 处理类里面的属性
def __str__(self):
return str(self.obj)
def main():
objects = [Computer('Asus')]
synth = Synthesizer('moog')
objects.append(Adapter(synth, dict(execute=synth.play)))
for i in objects:
print('{} {}'.format(str(i), i.execute()))
print('{}'.format(i.name))
if __name__ == '__main__':
main()
结果:
"""
the Asus computer executes a program
Asus
the moog synthesizer is playing an electronic song
moog
"""
来源:https://www.cnblogs.com/su-sir/p/12546881.html