Fork me on GitHub

适配器模式

一、内容

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

二、角色

  • 目标接口(Target)
  • 待适配的类(Adaptee)
  • 适配器(Adapter)

三、两种实现方式

  • 类适配器:使用多继承
  • 对象适配器:使用组合

四、适用场景

  • 想使用一个已经存在的类,而它的接口不符合你的要求
  • (对象适配器)想使用一些已经存在的子类,但不可能对每一个都进行子类化以匹配他们的接口。对象适配器可以适配它的接口

五、代码示例

from  abc import abstractmethod,ABCMeta
class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self,money):
        raise NotImplementedError

class Alipay(Payment):
    def pay(self, money):
        print("支付宝支付%s元"%money)


class ApplePay(Payment):
    def pay(self, money):
        print("苹果支付%s元"%money)

# =========待适配器==========
class WechatPay:
    def huaqian(self,a,b):
        print("微信支付%s元" % (a + b))

# ==========类适配器===========
class RealWeChatPay(Payment,WechatPay):
    def pay(self,money):
        return self.huaqian(money,0)


#===========对象适配器===========
class PavAdepter(Payment):
    def __init__(self,payment):
        self.payment = payment
        
    def pay(self,money):
        return self.payment.huaqian(money,0)

######使用=============
PavAdepter(WechatPay()).pay(100)

 

posted on 2018-03-03 12:31  vmaze  阅读(142)  评论(0编辑  收藏  举报

导航