6.python设计模式【适配器模式】

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

  • 两种实现方式

    • 类适配器:使用多继承
    • 对象适配器:使用组合
  • UML 图
    6.python设计模式【适配器模式】_第1张图片

  • 角色:

    • 目标接口(Target)
    • 待适配的类(Adaptee)
    • 适配器(Adapter)
  • 举个例子
    需求:当前我有一个新系统有支付宝和微信支付,以前的系统有银联支付,现在我想并兼容以前的系统
    方法一:类适配器

from abc import ABCMeta, abstractmethod


class Payment(metaclass=ABCMeta):
   @abstractmethod
   def pay(self, money):
       pass


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


class WechatPay(Payment):
   def pay(self, money):
       print("微信支付%d元" % money)


class BankPay:
   def cost(self, money):
       print("银联支付%d元" % money)

# 适配器类
# 继承Payment是为了适配,继承BankPay是为了调用
class NewBankPay(Payment, BankPay):
   def pay(self, money):
       self.cost(money)


p = NewBankPay()
p.pay(100)

方式二:对象适配器
假设我的旧系统中还存在一个苹果支付,则就要兼任两个支付方式

from abc import ABCMeta, abstractmethod


class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self, money):
        pass


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


class WechatPay(Payment):
    def pay(self, money):
        print("微信支付%d元" % money)


class BankPay:
    def cost(self, money):
        print("银联支付%d元" % money)

class ApplePay:
    def cost(self, money):
        print("苹果支付%d元" % money)

# 适配器类(组合)
class PaymentAdapter(Payment):
    def __init__(self,payment):
        self.payment=payment

    def pay(self, money):
        self.payment.cost(money)


p = PaymentAdapter(ApplePay())
p.pay(100)

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

你可能感兴趣的:(#,设计模式,设计模式,适配器模式,python)