適配器模式

不要求訪問他方的源代碼
不違反開放\封閉原則

一般兩個不兼容接口中的一個是他方的或者是老舊的。微信

若是是他方的,就意味着咱們沒法訪問其源代碼,若是是老舊的,那麼對其重構一般是不切實際的。更進一步,咱們能夠說修改一個老舊組件的實現以知足咱們的需求,不只不切實際,並且違反了開放、封閉原則。微信支付

 

 

開放/封閉原則是面向對象設計的基本原則之一,生命一個軟件實體應該對擴展是開放的,對修改時封閉的。
本質上意味着咱們應該無需修改一個軟件實體的源代碼就能擴展其行爲。
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)
相關文章
相關標籤/搜索