乙個類或者模組,應該僅有乙個引起其變化的原因。如果乙個類承擔的職責過多就等於將這些職責耦合在一起,乙個職責的變化就有可能影響其他職責的能力。
缺點:會造成類的數量增多。
破壞了封裝的原則:若將目標類中將含有私有資料訪問邏輯的業務行為分離出去,則會造成外部類或方法訪問目標類的私有資料,破壞封裝的特性。
例子:比如在我們日常的使用手機銀行支付的場景中,它需要使用者登陸系統並且使用者登陸成功後才能進行支付的業務。若我們將這些業務都放在system類中時,那麼這些業務其中任何乙個需求發生變化時,我們都需要來修改system類 ,這將會使得系統的穩定性降低。我們完全可以將登陸行為封裝在user類中,將支付行為封裝在pay類中,這樣使得每乙個類僅有乙個引起其變化的原因,進而使得系統穩定性提高。
是說軟體實體(類、模組、函式)應該可以擴充套件,但不可以修改。其特徵為:對於擴充套件是開放的,對於更改是封閉的。
例子:比如我們經常遇到讓我們去實現乙個簡單的計算器程式。我們給出了operation類,這個類實現了加、減、乘、除后等簡單的運算,之後老闆又提出讓我們實現冪運算的操作,接著我們需要去修改operation。過了不久老闆又提出實現開方的運算,那有需要我們去修改operation類。那麼每當boss提出乙個需求時,我們就得不斷的去修改operation類,著就違背了開放封閉的原則。乙個可行的方案是,我們定義opeation介面,在這個介面中給出getresult方法。讓不同的運算規則去實現該介面,這樣每當需求來時,我們不再去修改原先的operation類,而是給該運算規則生成新的類,該類實現operation介面就行。
子型別能夠替換掉他們的父型別。
例子:就是依賴倒置原則中的將實現了支付介面的實現類傳入,這就是黎克特制代換原則
如果某個介面不是內聚的,就應該按照業務分組,並將分組後的業務行為通過隔離的介面單獨定義。
例子:比如我們定義乙個貓科的介面felidae,介面中有兩個方法isfelidae()判斷是貓科動物和canmeow()可以喵喵喵喵叫的兩個方法。當對於實現了該介面老虎tiger類和貓cat類來說,顯然對於tiger類來說canmeow()是多餘的行為。那麼為了解決上述問題,我們可以將上述介面felidae介面進行分組,分為isfelidae和canmeow兩個介面。讓老虎tiger去實現isfelidae該介面,而貓cat去實現isfelidae和canmeow兩個介面。
缺點:如上所述,會出現介面數量過多。**的抽象度高但可讀性差。
設計模式(3) OOP原則
從最開始接觸的python到現在的c 這些都是物件導向的程式語言,那麼什麼是物件導向程式設計呢?在最開始學習python的時候,一直都在學習基本的資料結構,依然是面向過程程式設計,很難對程式語言有較深的理解,在學習c 的時候,我漸漸開始接觸類 介面等概念,然而真正開始理解並應用這些概念可花費了不少時...
OOP原則優化
原因 在程式中只要有哪個程式功能需要對資料庫進行訪問操作,那麼必須要有之前學習的四個步驟 建立資料庫連線物件 建立資料庫命令物件 針對不同的命令執行結果是否選擇使用另外兩個物件對結果進行處理 因此 決定使用物件導向的原則對資料庫的訪問操作功能進行單獨提取 復用的基本形式 編寫乙個通用的方法 復用技術...
OOP程式設計原則與設計模式(1)
johnny.deng pbp obp oop的特徵 pbp 基於過程 函式 域與生命週期的概念 函式過載 函式模板 異常處理 范型演算法。obp 基於物件 類 介面 類的生命週期 類模板。oop 物件導向 繼承 多型。三個概念步步深入,後者包括前者。其目的是實現軟體開發的可重用性,解決軟體危機 軟...