适配器模式
-
角色
- 目标接口
- 带适配的类
- 适配器
-
使用场景
- 想使用一个已经存在的类,而他的接口不符合你的要求
- (对象适配器)想使用进行存在的子类,但不能对每一个都进行子类化以匹配他们的接口。对象适配器可以适配他的父类接口
-
内容
将一个类的接口转换为客户希望的另一个接口,适配器模式使得原来由于接口不兼容而不能再一起工作的类可以一起工作
-
实现方法
-
类适配器:
多继承
from abc import ABCMeta,abstractstaticmethod class Pay(metaclass=ABCMeta): @abstractstaticmethod def pay(self): pass class AliPay(Pay): """docstring for AliPay""" def pay(self,money): print("使用支付宝余额支付{}".format(money)) class BankPay(object): """docstring for BankPay""" def const(self,money): print("使用银行卡支付{}".format(money)) # 使用适配器模式 # 使用多继承实现适配器 class NewBankPay(AliPay,BankPay): """docstring for NewBankPay""" def pay(self,money): self.const(money) new = NewBankPay() new.pay(10000)
-
对象适配器
使用组合
class Pay(metaclass=ABCMeta): @abstractstaticmethod def pay(self): pass class AliPay(Pay): """docstring for AliPay""" def pay(self,money): print("使用支付宝余额支付{}".format(money)) class AppPay(object): """docstring for AppPay""" def const(self,moneoy): print('使用app支付了{}'.format(moneoy)) class ApplyAndPay(AppPay,Pay): """docstring for ApplyAndPay""" def __init__(self, payment): self.payment = payment def pay(self,money): self.payment.const(money) app = ApplyAndPay(AppPay()) app.pay(123123)
-