跟著例項學習設計模式(2) 靜態工廠(建立型)

2021-07-03 17:24:01 字數 2640 閱讀 3860

靜態工廠設計模式是建立型設計模式。

設計意圖:例項化出我們需要的類物件,這些物件可以實現不同的功能,也可能只實現乙個功能!

類圖關係:

通過類圖關係我們可以看到靜態工廠負責建立operationfather類的物件,我們來看一下例項**。

我們是想實現乙個計算器,計算器的功能暫時有加法、減法功能,以後可能隨時增加新的功能如乘法、除法等。如果使用一般的做法,實際上我們寫乙個類就可以實現。

package com.factory.staticfactory;

/** * @author gaoxu

* 實踐出真知!

*/public class operation else if("".equals("-"))

//輸出計算結果

}}

大家看一下這個實現,基本的功能肯定是實現了,但是好像擴充套件性很差,如果我們需要加乙個乘法,那只能修改if語句增加條件,如果不斷增加新的計算功能,那麼這個類就不能維護了,什麼樣的方式才能讓**漂亮,功能擴充套件靈活,維護方便呢?

物件導向程式設計可以實現,首先我們需要封裝計算的實現、其次我們需要解耦資料獲取設定與計算的邏輯、還要考慮增加功能方便快捷。這幾點實現了,我們也就可以實現**漂亮,功能擴充套件靈活、**維護方便的幾個需求了。

首先我們把計算進行封裝,我們把資料處理放到父類中把計算放到不同的子類中。

package com.factory.staticfactory;

/** * @author gaoxu

* 實踐出真知!

*/public class operationfather

public void setnuma(double numa)

public double getnumb()

public void setnumb(double numb)

public double getresult()

}

package com.factory.staticfactory;

/** * @author gaoxu

* 實踐出真知!加法

*/public class operationadd extends operationfather

}

package com.factory.staticfactory;

/** * @author gaoxu

* 實踐出真知!減法

*/public class operationsub extends operationfather

}

我們看到上面三個類,有乙個父類負責設定資料,並提供了計算的方法。下面的兩個子類乙個加法類、乙個減法類,它們各個實現自己的業務邏輯(重寫了父類的方法),這樣做的好處是,每增加乙個功能點都不會修改到別的功能的**。

我們現在做的就是要根據使用者的需要建立出不同的功能產品來,這時可以使用靜態工廠了,來看工廠類的實現。

package com.factory.staticfactory;

/** * @author gaoxu

* 實踐出真知!

*/public class staticfactory else if("-".equals(type))

return operation;}}

大家看到了,我們把執行什麼操作的判斷挪到了工廠的方法裡了,我們使用工廠封裝了建立物件的過程,靜態方法的功能就是根據傳入的引數來建立不同功能的例項物件。建立物件也實現了,那麼再來看如何呼叫吧!

package com.factory.staticfactory;

/** * @author gaoxu

* 實踐出真知!

*/public class staticfactoryclient else

}}

我們可以看到客戶端的**也相當簡潔,而且可以很明確知道這個類要幹什麼,根本不用關心是由誰來幹。(這一點由功能來決定要哪個物件來幹)

由以上**我們可以看出:

客戶端--工廠類--計算實現類

這三塊的關係,各自有自己要做的業務,耦合性極低,功能擴充套件性增強,如果增加新的功能只需要實現乙個計算類,修改工廠靜態方法的判斷邏輯,由此我們實現了**簡潔、功能擴充套件靈活、維護方便的需求。

什麼場景下適合使用工廠模式建立:

1:物件需要很複雜的建立過程,在客戶端創見過於負責。

2:不同的物件可以實現不同功能,需要有很強的擴充套件需求時。

我們把物件的建立交給工廠類來實現,有如下優點(相對於不使用工廠的實現來說):

1:建立產品的過程被封裝起來,通過必要的邏輯判斷實現動態例項化相關的類物件,精簡客戶端的**,去除了客戶端與具體產品的依賴。

2:可以有效解耦,客戶端和具體實現功能的類之間沒有直接的建立耦合關係。

3:可以很好的復用功能,靈活的新增功能,新增產品只需要修改工廠邏輯和加產品實現類。

跟著例項學習設計模式(3) 工廠方法(建立型)

工廠方法屬於建立型設計模式。設計意圖 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到其子類。靜態工廠使用物件導向的方式,有效的解決了增加新產品給客戶端和實現類帶來的 修改問題,封裝了建立過程,減低了增加新產品帶來的 修改錯誤,但是新增功能需要修改客戶端 和工廠建...

跟著例項學習設計模式(1) 單例模式(建立型)

單例模式屬於建立型設計模式。設計意圖 保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式根據例項化物件時機的不同分為兩種,一種是餓漢式單例,一種是懶漢式單例。餓漢式單例在單例類被載入時候,就例項化乙個物件交給自己的引用 而懶漢式在呼叫取得例項方法的時候才會例項化物件。如下 餓漢式 pa...

《設計模式》學習筆記 靜態工廠模式

靜態工廠模式 staticfactorymethod 又叫做簡單工廠模式,屬於建立型模式但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是普通工廠模式的乙個特殊實現。以下 以靜態水果工廠為例進行舉例說...