适配器模式

不要求访问他方的源代码
不违反开放\封闭原则

通常两个不兼容接口中的一个是他方的或者是老旧的。

如果是他方的,就意味着我们无法访问其源代码,如果是老旧的,那么对其重构通常是不切实际的。更进一步,我们可以说修改一个老旧组件的实现以满足我们的需求,不仅不切实际,而且违反了开放、封闭原则。

 

 

开放/封闭原则是面向对象设计的基本原则之一,生命一个软件实体应该对扩展是开放的,对修改时封闭的。
本质上意味着我们应该无需修改一个软件实体的源代码就能扩展其行为。
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 @ 2018-12-17 12:49  慕沁  阅读(140)  评论(0)    收藏  举报