适配器模式 python

适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。
Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适用场景:
1、已经存在的类的接口不符合我们的需求;
2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;
3、在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。


作用:不改变原有接口,实现新接口的功能


class Target(object):
    def request(self):
        print 'Target request' #目标期待转换成的类


class Adaptee(object):
    def specialRequest(self):
        print 'Adaptee specialRequest' #待转换的类


class Adpater(object):
    def __init__(self, adpatee):
        self.adpatee = adpatee


    def request(self):
        self.adpatee.specialRequest()


if __name__ == '__main__':
    objects = []
    a = Target()
    b = Adaptee()


    objects.append(a)
    objects.append(Adpater(b))  #适配接口


    for obj in objects:
        obj.request()       #调用相同接口


总而言之,适配器就是在不改变特殊功能类和普通类的前提下,让普通类能够匹配特殊功能类的接口。比如普通功能类的函数功能
为A,在导入适配器后,调用该函数的功能变为b


#!/usr/bin/env python
# encoding: utf-8


class phone(object):
    def __init__(self):
        print 'need 110V'


    def charge(self,interface):
        interface.offer_220()


class volt_110(object):
    def __init__(self):
        pass


    def offer_110(self):
        pass


class volt_220(object):
    def __init__(self):
        pass


    def offer_220(self):
        pass


class socket_110(volt_110):
    def __init__(self):
        pass


    def offer_110(self):
        print 'offer 110V'


class socket_220(volt_220):
    def __init__(self):
        pass


    def offer_220(self):
        print 'offer 220V'


class adapter(object):
    def __init__(self,object):
        self.volt = object.offer_220()
        self.interface_110 = socket_110()


    def offer_220(self):
        self.interface_110.offer_110()


if __name__ == '__main__':
    a = phone()
    b = socket_220()
    #b.offer_220()
    c = adapter(b)
    a.charge(c)
    #a.charge(volt_110())
    #a.charge(volt_220())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值