1. 程式人生 > >設計模式:講在設計模式之前

設計模式:講在設計模式之前

通過 組合 支付寶 .com atp mon 情況下 基本功 代碼量

一、什麽是設計模式

1、設計模式的定義

技術分享圖片

2、註意事項

設計模式就是底層實現起來麻煩,上層調用簡單

設計模式就是“有一個套路 ,分幾個類,幾個方法,幾個屬性”

3、為什麽要有設計模式

在面向對象之前用的面向過程,小軟件,需求不斷增加,代碼量爆增,大家的代碼合並不了,幾百萬幾千萬的項目都不能交付,爆發了軟件危機,才有了軟件工程,設計模式,面向對象

二、講在設計模式之前

1、封裝

1、對象的行為對於外部世界來說就是不可見的,或者說對象的狀態信息是私密的

2、客戶端不能通過直接操作來改變對象的內部狀態。相反,客戶端需要通過發送消息來請求對象改變其內部狀態。對象可以根據請求的類型,通過特定的成員函數(例get和set)改變他們的內部狀態,

  以做出相應的響應

3、在python中,封裝(數據和方法的隱藏)的概念不是隱式的,因為它沒有提供封裝所需的關鍵字,諸如public、private和protected(在諸如c++或java之類的語言匯總,都提供了這些關鍵字)

  當然,如果在變量或函數名 前加上前綴_,就可以將其可訪問性變為私有

4、私有屬性很重要

2、繼承

多態的兩種類型

對象根據輸入參數提供方法的不同實現

不同類型的對象可以使用相同的接口

對於python來說,多態是該語言的內置功能,例如操作符"+"可以應用於兩個整數以進行加法運算,也可以應用於字符串來連接它們。在下面的示例中,字符串、元祖或列表都可以通過證書索引進行訪問

它為我們展示了python內置類型的多態

B是一種特殊的A才會用繼承

3、多態

Python是一種多態語言,程序員不用考慮多態

4、接口

一種特殊的類,聲明了若幹方法,要求繼承該接口的類必須實現這些方法。

作用:限制繼承接口的類的方法的名稱及調用方式;隱藏了類的內部實現。

接口就是一種抽象的基類(父類),限制繼承它的類必須實現接口中定義的某些方法

5、組合

它是一種將對象或類組合成更復雜的數據結構或軟件實現的方法

在組合中,一個對象可用於條用其他模塊中的成員函數,這樣一來,無序通過集成就可以實現基本功能的跨模塊作用

四、設計模式6大原則

1、開閉原則

一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。即軟件實體應盡量在不修改原有代碼的情況下進行擴展

白話:加功能可以很方便的加,改代碼盡量不要改?

python中的裝飾器就用的是開閉原則

2、裏氏(Liskov)替換原則

所有引用基類(父類)的地方必須能透明地使用其子類的對象。

傳父類ok,之類也應該不會報錯有問題,也就是之類不能覆蓋父類

尤其在“替換父類代碼的時候”

3、依賴倒置原則

高層模塊不應該依賴低層模塊,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。換言之,要針對接口編程,而不是針對實現編程

高層和底層不直接依賴,高層依賴底層 底層和高層不是一個人寫的,底層修改,高層也要修改,抽象就是接口編程

1、用接口專業代碼

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(Payment):
    def pay(self, money):
        print("微信支付%s元"%money)

2、新人代碼

class WeiXinZhiFu:
    def huaqian(self, money):
        print("微信支付%s元"%money)

class WangYinzhiFu:
    def huaqian(self, money):
        print("網銀支付%s元"%money)

4、接口隔離原則

使用多個專門的接口,而不使用單一的總接口,即客戶端不應該依賴那些它不需要的接口。

就是不要亂繼承:只有B是一種特殊的A才會用繼承

5、迪米特法則

一個軟件實體應當盡可能少地與其他實體發生相互作用

技術分享圖片

解偶

6、單一職責原則

不要存在多於一個導致類變更的原因。通俗的說,即一個類只負責一項職責。

技術分享圖片

7、合成復用原則

1、類適配器 用的是繼承

class WeChatPay(Payment, WeiXinZhiFu):
    def pay(self, money):
        self.huaqian(money)

2、對象適配器------用的是組合

class PayAdapter(Payment):
    def __init__(self, payment):
        self.payment = payment

    def pay(self, money):
        if hasattr(self, "pay"):
            return self.payment.pay(money)
        else:
            return self.payment.huaqian(money)

設計模式:講在設計模式之前