設計模式學習筆記 準備篇

2022-03-06 17:57:28 字數 3153 閱讀 4203

1. 設計模式的重要性

1.1 設計模式解決的是在軟體過程中如何來實現具體的軟體功能。實現同乙個功能的方法有很多,哪個設計容易擴充套件,容易復用,松耦合,可維護?設計模式指導我們找到最優方案。

1.2 設計中往往會存在設計缺陷,這些缺陷包括:

僵化性:難以對軟體進行改動,即使在功能上來看是很小的改動

脆弱性:在進行很小的改動時,可能導致很多地方出現問題

頑固性:要把系統中某些通用的功能分離出來的努力和風險非常巨大

粘滯性:當面臨改動時,改動的方案有很多,一些會保持設計,一些會破壞設計,當採用保持設計的方法比用破壞設計的方法更難應付變化時,說明原設計具有較高的粘滯性

晦澀性:模組難以理解

不必要的重複:**不能復用,往往通過copy-paste來實現相似功能

不必要的複雜性:設計中包含了沒有用的成分,往往是過度設計導致的

1.3 如果你覺得在開發過程中發現以上問題(缺陷),那麼就需要使用設計模式來改善最初設計,即重構原有的設計。如果你是最初的設計者,那麼也需要應用設計模式來找到乙個最優方案。設計模式不是程式語言,它修煉的是程式設計師的內功。因此,對於乙個開發者來說,學習設計模式是非常必要的。

2. 對於初學者來說,必要的知識準備還是必須的,沒有這些基礎就很難將這些理解透徹。

2.1 物件導向基本知識

設計模式是物件導向程式設計的設計指導,因此學習設計模式前先要理解什麼是物件導向,這裡只簡單列出了物件導向的主要概念,要是初學者的話還得查閱相關資料;對已經了解的老手來說,權當複習和梳理一下吧。

2.1.1 物件導向三大特徵:封裝、繼承、多型

2.1.2 類與例項

2.1.3 構造(析構)方法

2.1.4 過載

2.1.5 訪問修飾符

2.1.6 屬性/字段/方法

2.1.7 抽象類

2.1.8 介面

2.2 uml類圖

在學習設計模式時,通常接觸到的只有類圖,因此讀懂uml類圖對理解模式來說有很大幫助。下面來介紹uml類圖中的關係    

2.2.1 依賴關係(dependency),用虛線加箭頭表示。如上圖動物(animal)依賴空氣(air)。表示依賴關係的**有以下幾種

1)作為引數

public

class

air

}public

abstract

class

animal

}

2)在方法內部定義    

///

///動物依賴空氣才能呼吸,在方法內部例項化新物件

/// public

void

breathe()

3)靜態方法呼叫

///

///在方法中呼叫靜態方法

/// public

void

test()

2.2.2 繼承關係(inherit),用實線加空心箭頭表示,如上圖鷹(eagle)繼承自動物(animal)    

///

///鷹繼承自animal

/// public

class

eagle : animal

2.2.3 實現關係(realize),用虛線加空心箭頭表示,如上圖鷹(eagle)實現了飛行能力(iflyable)    

///

///鷹繼承自animal

/// public

class

eagle : animal, iflyable

}

2.2.4 組合關係,講組合關係之前不得不談關聯關係與聚合關係

1)關聯關係(association):對於兩個相對獨立的物件,當乙個物件例項與另乙個物件的一些特定例項存在固定的對應關係時,這兩個物件之間的關係為關聯關係。例如:公司與員工的關係      

**表現,通過例項欄位或屬性來實現

public

class

emplolyee

}public

class

company

2) 聚合關係(aggregate): 是關聯關係的一種,是一種較強的關聯關係,強調整體與部分之間的關係。例如:電腦與顯示器的關係,就是整體與部分的關係,即聚合關係      

**表現,也是通過例項欄位或屬性來實現      

public

class

displayer

}public

class

computer

3)組合關係,組合關係是聚合的一種特殊形式,表示乙個所有物例項不能同時被兩個所有物所擁有。如上例:鷹擁有一對翅膀,它的翅膀不能同時屬於別的鷹。

**表現,也是通過例項欄位或屬性來實現

public

class

wing

//////

鷹繼承自animal

/// public

class

eagle : animal, iflyable

public

void

fly()

}

關聯關係與聚合關係的區別:關聯關係所涉及的兩個物件是處在同乙個層次上的,比如程式設計師和計算機的關係就是一種關聯關係,而不是聚合關係,因為程式設計師不是由計算機組成的。聚合關係涉及的兩個物件處於不平等的層次上,乙個代表整體,乙個代表部分。如計算機與顯示器的關係就是聚集關係,因為顯示器是計算機的一部分。

聚合關係與組合關係的區別:聚合關係中處於被持有的物件,可以被別的物件所持有。如多型計算機可以共享同乙個顯示器。組合關係中被持有的物件只能被乙個物件引用,不能共享給其它物件;而且被持有的物件的生命週期也由所有者控制,當所有者析構了,其所有物必須隨著它一起析構。

設計模式學習筆記(目錄篇)

為了方便檢視,特此將設計模式學習筆記系列單獨做乙個目錄。1 設計模式學習筆記 一 命令模式 2 設計模式學習筆記 二 觀察者模式 3 設計模式學習筆記 三 裝飾模式 4 設計模式學習筆記 四 策略模式 5 設計模式學習筆記 五 介面卡模式 6 設計模式學習筆記 六 責任鏈模式 7 設計模式學習筆記 ...

設計模式學習筆記(單例模式篇)

確保乙個類只有乙個例項,並提供乙個全域性訪問點。public class singleton return instance 私有化了建構函式,並對外提供獲取例項物件的共有方法。所謂懶漢式,就是用到的時候才會真正的去建立物件。優點 可以實現延時載入 缺點 在多執行緒併發訪問的情況下,會有執行緒安全問...

設計模式學習筆記(總結篇 模式分類)

gof根據模式的目標將模式分為三個類目 建立型 行為型和結構型。建立型模式設計物件的例項化,這類模式的特點是,不讓使用者依賴於物件的建立或排列方式,避免使用者直接使用new運算子建立物件。gof的 23中模式中的下列 5種模式屬於建立型模式 1 工廠方法模式 定義乙個用於建立物件的介面,讓子類決定例...