Head First 設計模式 Factory

2021-08-31 08:51:09 字數 1617 閱讀 9133

chapter 4 --工廠模式

烘烤oo的精華

1. 當使用new時,是在例項化乙個具體類,所以是對實現而不是介面進行程式設計。

2. 如果**是針對介面而寫,那麼可以通過多型,它可以與任何新類實現該介面。

4. 工廠方法用來處理物件的建立,並將這樣的行為封裝在子類中。這樣,客戶程式中關於超類的**和子類物件建立**解耦了。

abstract product factorymethod(string type)

- 工廠方法是抽象的,所以依賴子類來處理物件的建立

- 工廠方法必須返回乙個產品。超類中定義的方法,通常使用到工廠方法的返回值。

- 工廠方法將客戶(也就是超類中的**)和實際建立具體產品的**分隔開來。

- 工廠方法可能需要引數(也可能不需要)來指定所要的產品。

5. 所有工廠模式都用來封裝物件的建立。工廠方法模式(factory method pattern)通過讓子類決定該建立的物件是什麼,來達到將物件的過程封裝的目的。

工廠方法模式:

定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類。

設計原則:

(1)  要依賴抽象,不要依賴具體類。(依賴倒置原則)

說明了不能讓高層元件依賴低層元件,而且,不管高層或低層元件,兩者都應該依賴於抽象。所謂高層元件,是由其他低層元件定義其行為的類。倒置是指和一般oo設計的思考方式完全相反。低層元件現在依賴高層的抽象了。

以下指導方針,可以幫助你避免在oo設計中違反依賴倒置原則:

6. 通過抽象工廠所提供的介面,可以建立產品的家族,利用這個介面書寫**,我們的**將從實際工廠解耦,以便在不同的上下文中實現各式各樣的工廠,製造出各種不同的產品。

7. 從抽象工廠中派生出一些具體工廠,這些工廠產生相同的產品,但產品的實現不同。

抽象工廠模式:

提供乙個介面,用於建立相關或依賴物件的家族,而不需要明確指定具體類。

- 抽象工廠允許客戶使用抽象的介面來建立一組相關的產品,而不需要知道(或關心)實際產出的具體產品是什麼樣子。

8. 抽象工廠的任務是定義乙個負責建立一組產品的介面。這個介面內的每個方法都負責建立乙個具體產品,同時我們利用實現抽象工廠的子類來提供這些具體的做法。所以,在抽象工廠中常利用工廠方法來實現生產方法。

9.比較

工廠方法使用繼承來負責建立物件,利用工廠方法建立物件,需要擴充套件乙個類,並覆蓋它的工廠方法。其實整個工廠方法模式,只不過就是通過子類來建立物件。所以工廠方法只負責將客戶從具體型別中解耦;而抽象工廠使用組合來負責建立物件。抽象工廠提供乙個用來建立乙個產品家族的抽象型別,這個型別的子類定義了產品被產生的方法。要想使用這個工廠,必須先例項化它,然後將它傳入一些針對物件型別所寫的**中。(組合)

本章小結:

headfirst設計模式

花了一周多一點的時間看完了headfirst的設計模式。看完之後有一種恍然大悟的感覺,仔細想想有覺得自己好像什麼也看懂。簡單說下對這本書的一點感悟吧,headfirst的書比較通俗易懂,之前看了四人幫的設計模式,看一半就有一種痛不欲生的感覺,自己水平有限,看不懂,也就沒在勉強自己了。對於模式其實簡單...

HeadFirst 設計模式 工廠模式

定義乙個建立物件的介面,由子類決定要例項化的類。工廠方法將類例項推遲到子類。依賴倒置。第一種方式是 class pizzastore public pizza orderpizza string type class pizzafactory pizza pizza null 將pizza這個例項提...

HeadFirst 設計模式 復合模式

模式通常被一起使用,並被組合在同乙個設計解決方案中。復合模式定義 復合模式在乙個解決方案中結合兩個或多個模式,以解決一般或重 生的問題。mvc,mode 模型 view 檢視 controller 控制器 分別是mvc的三個部分。使用mvc模式,目的是為了解耦,各模組部分只需要處理相應的內容。檢視層...