物件導向高階(一) 設計模式簡介

2021-09-10 06:38:15 字數 3245 閱讀 3048

一、模式

在一定的環境中解決某一問題的方案,包括三個基本元素——問題、解決方案和環境。

二、設計模式

這是一套被反覆使用,多數人知曉的,經過分類編目的、**設計經驗的總結。使用設計模式是為了可重用**、讓**更容易被他人理解、保證**可靠性。設計模式於他人於系統都是多贏的,設計模式使得**編制真正工程化。

設計模式是軟體工程的基石脈絡,如同大廈的結構一樣。

三、為什麼學習設計模式

1、意義

提高職業素養,更深入的理解程式設計吧,之前學的感覺都是一些語法上的東西,屬於皮毛。這才算開始真正的程式設計了。

2、方法

這個老師總結的就已經很到位了,對於初學者:積累案例大於背類圖。這一點通過聽課和看《大話設計模式》深有感觸,基本上牢牢理解每個設計模式對應的典型案例,就會對這種設計模式的方式、用途、缺點有乙個大致了解。

四、設計模式分類

1、建立型模式

通常和物件的建立有關,涉及到物件的例項化的方式。

(1)工廠方法模式:定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類中。

(3)建造者模式:將乙個複雜的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。

(4)原型模式:用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。

(5)單例模式:保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

2、結構性模式

描述的時如何組建雷和物件以獲得更大的結構。

(1)**模式:就是為其他物件提供一種**以控制這個物件的訪問。

(2)裝飾者模式:動態的給乙個物件新增一些額外的職責,就增加功能來說,此模式比生產子類更為靈活。

(3)介面卡模式:是將乙個類的介面轉換成客服希望的另外乙個介面,使得原本由於介面不相容而不能一起工作的那些類可以一起工作。

(4)橋接模式

(5)組合模式

(6)外拐模式

3、行為型模式

用來對類或者物件怎樣互動和怎樣分配職責進行描述。

(1)模板方法模式

(2)命令模式

(3)責任鏈模式

(4)策略模式

(5)中介者模式

(6)觀察者模式

(7)備忘錄模式

(8)訪問者模式

(9)狀態模式

(10)直譯器模式

(11)迭代器模式

五、設計模式的基本原則

設計模式體現的是軟體設計的思想,而不是軟體技術,它重在使用多型與抽象類來解決各種問題。

1、開放封閉原則:(ocp原則)類的改動是通過增加**進行的,而不是修改源**

對於擴充套件是開放的,對於更改是封閉的。

物件導向設計的核心所在。遵循這個原則,可以帶來物件導向技術所聲稱的巨大好處,也就是可維護,可擴充套件,可復用,靈活性好,開發人員應該僅對程式呈現出頻繁變化的那部分做出抽象,然而,對於應用程式中的每個部分,都可以地進行抽象同樣不是乙個好主意,拒絕不成熟的抽象和抽象同樣重要。

2、依賴倒置原則:依賴於抽象(介面),不要依賴具體的實現(類),也就是針對介面程式設計

高層模組不應該依賴底層模組,兩個都應該依賴抽象。

抽象不應該依賴細節。細節應該依賴於抽象。

依賴倒轉原則可以說是物件導向設計的標誌,用哪種語言編寫程式不重要,如果編寫的時候考慮的都是如何針對抽象程式設計而不是針對細節程式設計的。即程式中所有的依賴關係都是終止與抽象類或者介面,那就是物件導向的設計了,反之就是過程化的設計。

3、介面隔離原則:不應該強迫客戶的程式依賴他們不需要的介面方法,乙個介面應該只提供一種對外功能

4、黎克特制替換原則:子類必須能替換它的父型別。

任何抽象類出現的地方都可以同他的實現類進行替換,實際就是虛擬機制,語言級別實現物件導向功能

5、合成復用原則:如果使用繼承,會導致父類的任何變化都影響到子類的行為,如果使用物件組合,就降低了這種依賴行為

6、迪公尺特法則:乙個軟體實體應當可能少地與其他實體發生相互作用

如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三者**這個呼叫。

迪公尺特法則首先強調的前提是在類的結構設計上,每乙個類都應當盡量降低成員的訪問許可權。

迪公尺特法根本思想強調了類之間的松耦合,耦合越弱,越有利於復用,乙個處在弱耦合的類被修改,不會對有關係的類造成波及。

7、單一職責原則:就乙個類而言,應該僅有乙個引起它變化的原因。

如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或者抑制這個類完成其他職責的能力,這種耦合會導致脆弱的設計,當變化發生時,設計會遭到意想不到的破壞。

物件導向高階一

通過字串的形式操作物件相關的屬性 四個可以實現自省的函式 hasattr getattr setattr delattr class people country china def init self,name self.name name p people spring print p.dict...

物件導向 高階

json方式的物件導向 json 把方法包在json裡 json物件導向 有人管他叫 命名空間 在公司裡 把同一類 的方法包在一起 拖拽和繼承 物件導向的拖拽 改寫原有的拖拽 繼承 asdf 拖拽 instanceof 檢視物件是某個類的例項 使用繼承 限制範圍的拖拽類 建構函式的偽裝 屬性的繼承 ...

物件導向高階

public class person public void print public class student extends person 重寫了父類方法 public void print public class demo public class demo 1.不能new這個類,只能靠...