码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式-适配器模式

时间:2020-03-22 17:41:18      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:hda   处理   ftime   增加   com   ==   int   form   接口   

适配器:

  定义:可使无直接联系的两个接口或者类能一起工作

  方法:适配器就相当于在运来的基础上增加一层调用关系(封装)。

  其他:实现适配器的方法有很多,比如说继承、多继承。

# 案例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
"""

 

设计模式-适配器模式

标签:hda   处理   ftime   增加   com   ==   int   form   接口   

原文地址:https://www.cnblogs.com/su-sir/p/12546881.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!