Python常用設計模式 物件導向設計原則

2021-10-25 12:24:11 字數 2154 閱讀 7064

乙個軟體實體如類、模組和函式應該對擴充套件開放,對修改關閉。即軟體實體應該在不修改原**的情況下進行修改。

所有引用父類的地方必須能透明地使用其子類地方必須能透明地使用其子類的物件,乙個簡單的例子加強理解

class

user

(object):

defprint_name

(self)

:pass

class

vipuser

(user)

:def

print_name

(self)

:"""

保證引數和返回值型別需要和父類一樣

:return:

"""pass

defprint_name

(u):

""" 不論使用user還是繼承user的vipuser,呼叫的方式是一樣的。這就要求user和vipuser的方法引數和返回值型別是一樣的

:param u:

:return:

"""u.print_name(

)

高層模組不應該依賴底層模組,二者都應該依賴抽象。抽象不應該依賴細節,細節應該應該依賴抽象。要針對介面程式設計,而不是針對實現變成。通過例子加強理解:

from abc import abcmeta, abstractmethod

# 介面,抽象不應該依賴細節

class

payment

(metaclass=abcmeta)

: @abstractmethod

defpay(self, money)

:pass

# 底層**和高層**都是細節,細節應該依賴抽象

# 底層**

class

alipay

(payment)

:def

pay(self, money)

:print

("支付寶支付了元!"

.format

(money)

)class

wechatpay

(payment)

:def

pay(self, money)

:print(%

(money)

)# 高層**,高層模組不應該依賴底層模組,二者都應該依賴抽象

a = alipay(

)w = wechatpay(

)a.pay(

100)

w.pay(

100)

使用多個專門的介面,而不使用單一的總結口,高層的**不應該依賴那些它不需要的介面。通過例子加強理解:

from abc import abcmeta, abstractmethod

class

landanimal

(metaclass=abcmeta)

: @abstractmethod

defwalk

(self)

:pass

class

wateranimal

(metaclass=abcmeta)

: @abstractmethod

defswim

(self)

:pass

class

skyanimal

(metaclass=abcmeta)

: @abstractmethod

deffly(self)

:pass

# 高層的**不應該依賴那些它不需要的介面

class

tiger

(landanimal)

:def

walk

(self)

:pass

# 高層的**不應該依賴那些它不需要的介面

class

frog

(landanimal, wateranimal)

:def

walk

(self)

:pass

不要存在多於乙個導致類變更的原因,乙個類只負責一項職責,乙個類只做一件事。把面向過程的**放到類中,雖然用到了類,但不是物件導向

Python常用設計模式 工廠模式

工廠模式是乙個在軟體開發中用來建立物件的設計模式。當程式執行輸入乙個 型別 的時候,需要建立於此相應的物件。這就用到了工廠模式。在如此情形中,實現 基於工廠模式,可以達到可擴充套件,可維護的 當增加乙個新的型別,不在需要修改已存在的類,只增加能夠產生新型別的子類。設計模式的 工廠 這個概念就是 於我...

python常用設計模式(1)

設計模式 於建築行業,中西方建築各有自己的風格 每種風格都有自己的建築方法 套 路 只要按照不同風格的建築方法 套路 就能建成不同風格的建築 簡單的說設計模式就是一 種 方法 套路 再比如肯德基麥當勞快餐店為什麼全球的口味都一樣呢?就是做食品的套路相 同 炸雞塊多長時間都是固定的 程式中設計模式是軟...

python物件導向 單例設計模式

設計模式時前人工作的總計和提煉,通常,被人們廣泛流傳的設計模式都是針對某一特定問題的成熟的解決方案 單例設計模式的應用場景 單例 讓類建立的物件,在系統中只有唯一的乙個例項 實現思路 1 定義乙個類屬性,初始值是none,用於記錄單例物件的引用 2 重寫 new 方法 3 如果此類屬性 is non...