Python适配器模式

作者: plectrum | 来源:发表于2016-02-29 12:01 被阅读490次

标签: python 设计模式


引子

适配器模式比较简单,其实只是理解上相对容易一些,就不说太多了。

定义

将一个类的借口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

看一个用来计算年龄的例子

class AgeCalculator(object):
    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

之前的方式必须传入类似于YY-MM-DD形式的年月日来计算,但是实际情况可能都会使用python的datetime类型的时间日期进行计算,这个时候可以使用一个适配器将datetime类型的日期转换成YY-MM-DD的形式以适应之前的方式

class DateAgeAdapter(object):
    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)
        print( self.calculator.calculate_age(date))

实际运行看看

birthdate = datetime.date(1982, 3, 25)
calcudate = datetime.date(2015,2,22)

adapter = DateAgeAdapter(birthdate)
adapter.get_age(calcudate)

相关文章

  • Java设计模式(二)

    talk is cheap show me the code 适配器模式 类适配器模式 接口适配器模式 对象适配器...

  • 适配器模式

    目录 1、什么是适配器模式? 2、适配器模式结构? 3、如何实现适配器模式? 4、适配器模式的特点? 5、适配器模...

  • 设计模式之适配器模式

    适配器模式: 类适配器模式、对象适配器模式、接口适配器模式 1.类适配器模式:新的接口出现了,但是和老的接口不兼容...

  • 学习iOS设计模式第一章 适配器(Adapter)

    今天学习了iOS设计模式中的适配器模式,适配器有两种模式对象适配器模式-- 在这种适配器模式中,适配器容纳一个它包...

  • 第4章 结构型模式-适配器模式

    一、适配器模式简介 二、适配器模式的优点 三、适配器模式的实例

  • 设计模式(Design Patterns)适配器模式(Adapt

    适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 类的适配器模式 场景:将一个类转换成...

  • 适配器模式

    适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。适配器模式将某个类的接口转换成客户端期...

  • 适配器模式

    先直观感受下什么叫适配器 适配器模式有类的适配器模式和对象的适配器模式两种不同的形式。 类适配器模式 对象适配器模...

  • 适配器模式

    适配器模式 一、适配器模式定义 适配器模式的定义是,Convert the interface of a clas...

  • 设计模式:结构型

    享元模式 (Pools,Message) 代理模式 适配器模式 :类适配器和对象适配器 装饰者模式 外观模式 桥接...

网友评论

    本文标题:Python适配器模式

    本文链接:https://www.haomeiwen.com/subject/fwjgkttx.html