更多信息请参考 【设计模式】
适配器模式内容
将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
适配器模式实现方式
- 类适配器:使用多继承
- 对象适配器:使用组合
适配器模式中的角色
- 目标接口(Target)
- 待适配的类(Adaptee)
- 适配器(Adapter)
适配器模式使用场景
- 想使用一个已经存在的类,而它的接口不符合你的要求
- 想使用一些已经存在的子类,但不可能对每一个都进行子类化以匹配它们的接口,对象适配器可以适配它的父类接口
适配器模式实例
(1)类适配器,即使用多继承的实例
from abc import ABCMeta,abstractmethod
class Payment(metaclass=ABCMeta):
@abstractmethod
def pay(self,money):
pass
class Alipay(Payment):
def pay(self,money):
print(f"pay {money} in alipay way...")
class WechatPay(Payment):
def pay(self,money):
print(f"pay {money} in wechat way...")
class BankPay(object):
def cost(self,money):
print(f"pay {money} in bankpay way...")
class NewBankPay(Payment,BankPay):
def pay(self,money):
self.cost(money)
if __name__=="__main__":
p=Alipay()
p.pay(100)
p2 = NewBankPay()
p2.pay(100)
执行结果如下:
pay 100 in alipay way...
pay 100 in bankpay way...
(2)对象适配器,使用组合
from abc import ABCMeta,abstractmethod
class Payment(metaclass=ABCMeta):
@abstractmethod
def pay(self,money):
pass
class Alipay(Payment):
def pay(self,money):
print(f"pay {money} in alipay way...")
class WechatPay(Payment):
def pay(self,money):
print(f"pay {money} in wechat way...")
class BankPay(object):
def cost(self,money):
print(f"pay {money} in bankpay way...")
class PaymentAdapter(Payment):
def __init__(self,payment):
self.payment=payment
def pay(self,money):
self.payment.cost(money)
if __name__=="__main__":
p=Alipay()
p.pay(100)
p2 = PaymentAdapter(BankPay())
p2.pay(100)
执行结果如下:
pay 100 in alipay way...
pay 100 in bankpay way...