工廠設計模式 java

2021-08-21 11:15:10 字數 2880 閱讀 7495

在介紹工廠方法方法模式之前,先看下不用設計模式的**,以牛奶為例,乙個銷售平台,提供多個牌子的牛奶,客戶在購買每種牛奶的時候寫法:

telunsu telunsu=new telunsu();//特崙蘇牛奶

yili yili=new yili();//伊利牛奶

簡單來說,就是客戶端要哪種牛奶,我們建立乙個(通過new乙個物件)。這種方式當然可以解決問題。接下來看下用設計模式的寫法和思想。

簡單工廠模式的思路,先定義乙個工廠(乙個工廠類),提供乙個方法用於建立每個牌子的牛奶,再定義乙個牛奶的介面,每種牌子的牛奶都實現這個介面

public class ******factory 

if ("yili".equals(name))

return null;

}}

很好理解,這個方法用於接收客戶端想拿到的牛奶的名字,拿到之後這個工廠加以建立並返回給客戶端,接著看下客戶端的呼叫過程:

******factory ******factory=new ******factory();

milk telunsu = ******factory.getmilk("telunsu");

milk yili = ******factory.getmilk("yili");

通過建立乙個工廠,並在每個牌子的牛奶上都實現了milk介面,我們可以通過名字拿到牛奶(也可以通過別的屬性,自定義),這樣做的好處是客戶在拿牛奶的時候看不到生產過程,什麼是生產過程,new出來的就是生產過程,因為在實際應用中,建立乙個牌子牛奶,往往是很複雜的,簡單來說,就是在new的過程中需要進行每個引數的賦值操作,也會有一些別的類的引用,導致客戶端只想要乙個特崙蘇牛奶,我們每次都進行了一大堆操作,這個過程當然也可以進行優化,這裡不進行闡述。

再實現了簡單工廠模式之後,客戶端只要告訴工廠我要牛奶的名字即可,建立全部交由這個工廠去實現。

在實現了簡單工廠模式之後,考慮到乙個問題,如果要新增乙個新牌子的牛奶,這時候,需要在getmilk方法中加乙個if語句,這有點違背了設計模式的開閉原則(開閉原則就是說對擴充套件開放,對修改關閉。在程式需要進行拓展的時候,不能去修改原有的**。)當然在拓展業務的時候,不去修改原有的**是非常難做到的,但在設計之初,能設計出盡量滿足開閉原則的**是我們要追求的,簡單工廠模式還有乙個弊端就是客戶端需要傳入牛奶的名字(也可以是別的),這裡是乙個字串,這往往加大程式放生錯誤的機率。所以工程方法模式出現了。

工廠方法模式就是講乙個簡單的工廠,分為多個工廠,在上面的例子中,乙個工廠建立了所有牌子的牛奶,其實這是不符合現代化的實際情況的,應該是每種牌子的牛奶都交由乙個工廠去生產,也就說想要特崙蘇牛奶,通過特崙蘇牛奶工廠去建立,想要伊利牛奶,通過伊利牛奶去建立。看下這種模式下的**:

public inte***ce factory
這裡先構造乙個工廠介面,就是用來生產牛奶的,生產什麼牛奶,由實現這個介面的每個工廠去完成。

public class tefactory implements factory 

}

特崙蘇的工廠實現了工廠介面,並且在getmilk方法裡建立特崙蘇牛奶,伊利牛奶一樣的操作,**省略。也就是實現乙個目的:專人做專事。下面在看下客戶端呼叫的方式:

// 特崙蘇工廠

factory tefactory=new tefactory();

// 特崙蘇工廠生產特崙蘇

milk telunsu = tefactory.getmilk();

// 伊利工廠

factory yifactory=new yifactory();

// 伊利工廠生產伊利

milk yili = yifactory.getmilk();

這樣我們完成了每個工廠生產每種牛奶,同樣的,客戶端並不會知道我們生產的具體過程。

上面介紹了簡單工廠和方法工廠,最後介紹下抽象工廠。

抽象工廠模式是在開發中用的比較多的一種工廠設計模式,它可以說是對工廠方法模式的一種改進,在上面的工廠方法模式中,我們生產一種牛奶就要出現乙個工廠類,但往往在實際開發中,製作牛奶會有一些相同的標準,我們可以用乙個抽象工廠把這些共同的方法提煉出來。抽象工廠還可以減少我們建立的工廠類。看下**實現:

public abstract class abstractfactory
定義了乙個抽象工廠,抽象工廠裡面兩個抽象方法分別對應兩種品牌的牛奶,抽象工廠面可以有一些公共的邏輯。接著我們去繼承這個抽象工廠。

public class milkfactory extends  abstractfactory 

@override

public milk gettelunsu()

}

到這裡就很明了了,我們想要拿到特崙蘇或者伊利,只要構造出這個牛奶工廠就可以。

milkfactory factory = new milkfactory();

milk telunsu = factory.getsanlu();

milk yili = factory.getyili();

抽象工廠的實現,解決了每個工廠生產每個牌子的牛奶(牛奶工廠的每個方法),在需要新增乙個新品種的牛奶,我們只要在抽象工廠裡面去寫乙個抽象方法,然後再牛奶工廠實現類裡去實現即可,並且抽象工廠裡面每個牛奶都可以繼承公共方法,加以復用。

上面實現了3種工廠設計模式,客戶端不需要知道我們牛奶的建立過程,只要拿到牛奶。工廠設計模式可以說也是在開發中用的比較多的一種,很多的情景都可以用工廠模式。但還是要記住,不要把乙個簡單的問題變複雜。不要就乙個new 可以完成的功能去改寫成工廠模式。關於設計模式還是要多思考。

Java設計模式 工廠設計模式

工廠模式 主要用來例項化有共同介面的類,工廠模式可以動態決定應該例項化那乙個類。工廠模式的形態 工廠模式主要用一下幾種形態 1 簡單工廠 factory 2 工廠方法 factory method 3 抽象工廠 abstract factory 簡單工廠 factory 又叫靜態工廠 是工廠模式三中...

Java設計模式 工廠設計模式

工廠設計模式分為以下三種 簡單工廠模式 工廠方法模式 抽象工廠模式 現在我想買一台電腦,有兩款可以選擇,一款是dell,另一款是hp.現在對於這個問題用一般的思路來解決就是 inte ce computer class dellcomputer implements computer class h...

java設計模式 工廠設計模式

工廠模式分為簡單工廠 工廠方法 抽象工廠模式 工廠模式是我們最常用的例項化物件模式了,是用工廠方法代替new操作的一種模式。利用工廠模式可以降低程式的耦合性,為後期的維護修改提供了很大的便利。將選擇實現類 建立物件統一管理和控制。從而將呼叫者跟我們的實現類解耦。簡單工廠模式相當於是乙個工廠中有各種產...