設計模式(二) 工廠模式

2021-09-22 16:50:42 字數 2872 閱讀 9696

工廠模式

抽象工廠模式

簡單工廠適用於工廠類負責建立的物件較少的場景,且客戶端只需要傳入工廠類的引數,對於如何創

建物件的邏輯不需要關心。

首先定義乙個介面car,包含乙個drive的方法

public

inte***ce

car

分別有兩種車,實現了該介面

public

class

baoma

implements

car}

public

class

nissan

implements

car}

然後建立乙個工廠,專門用於根據使用者輸入獲取對應的車

public

class

ca***ctoryif(

"nissan"

.equals

(name)

)return null ;

}}

建立測試類

public

class

test******factory

}

優點:簡單,把建立物件的細節放入的工廠

缺點:建立物件時需要知道約定好的引數,例如獲取寶馬4s店的時候需要輸入bmw容易出錯,擴充套件4s店的時候需要修改工廠類,增加業務判斷邏輯。

改進:針對約定引數的問題,可以考慮用反射,減少出錯的概率

public

class

ca***ctoryplus

catch

(exception e)

return car;}}

public

class

test******factory

}

查漏補缺:ca***ctoryplus的createcar方法一開始想寫成<? implements car>但是編譯不過,原來實現介面也可以用<? extends car>這種寫法。

定義乙個建立物件的介面,但讓實現這個介面的類來決定例項化哪個類,工廠方法讓類的例項化推遲到子類中進行。在工廠方法模式中使用者只需要關心所需產品對應的工廠,無須關心建立細節,而且加入新的產品符合開閉原則。

工廠方法模式主要解決產品擴充套件的問題,在簡單工廠中,隨著產品鏈的豐富,如果每個產品的建立邏輯有區別的話,工廠的職責會變得越來越多,有點像萬能工廠,並不便於維護。

//定義汽車工廠介面

public

inte***ce

ca***ctory

//寶馬工廠單獨生產寶馬車

public

class

baomafactory

implements

ca***ctory

}//尼桑工廠專門生產nissan車

public

class

nissanfactory

implements

ca***ctory

}//測試類

public

class

testfuncfactory

}

簡單工廠中乙個工廠創造多種物件(ca***ctory可以生產尼桑和寶馬兩種物件),工廠模式的核心在於定義工廠介面,ca***ctory定義工廠的規職責是創造汽車,然後再由具體的工廠(baomafactory/nissanfactory)實現介面建立指定物件,一種工廠建立一種物件,這樣做的好處當然是職責明確,要什麼物件就用什麼工廠,要擴充套件的話只要去實現ca***ctory就可以了。

抽象工廠模式(abastract factory pattern)是指提供乙個建立一系列相關或相互依賴物件的介面,無須指定他們具體的類。客戶端(應用層)不依賴於產品類例項如何被建立、實現等細節,強調的是一系列相關的產品物件(屬於同一產品族)一起使用建立物件需要大量重複的**。需要提供乙個產品類的庫,所有的產品以同樣的介面出現,從而使客戶端不依賴於具體實現。

建立抽象工廠,定義乙個產品族包括小轎車和suv,這就是乙個工廠需要生產的產品族

public

inte***ce

absca***ctory

//定義新的產品suv

public

inte***ce

suvpublic

class

nissansuv

implements

suv}

public

class

baomasuv

implements

suv}

兩個工廠分別實現介面

public

class

bmwfactory

implements

absca***ctory

@override

public car createcar()

}public

class

nissanfactory

implements

absca***ctory

@override

public car createcar()

}

測試類

public

class

testabsfactory

}

抽象工廠的好處是乙個工廠可以生產出一系列的產品。兩個產品族是suv和car,產品登記也分為寶馬(a級車)和尼桑(b級車)。有這種特點的產品適合抽象工廠模式

二 設計模式 工廠模式

一.傳統時以pizza類舉例,乙個抽象類pizza,由幾個pizza實現類實現,主餐廳看看客戶點什麼便生產,但是如果需要增加新的pizza品種,則要增加乙個新的實現類,然後主餐廳裡增加對邏輯的判斷,顯然,違背了開放關閉原則。所以 工廠模式為解決某些需要生產大量一批類的問題 二.簡單工廠模式 定義了乙...

設計模式(二)工廠模式

與 模式不同,生產模式隱藏過程,只關注結果 簡單工廠,工廠方法,抽象工廠 一,簡單工廠模式 public inte ce car public class aodi implements car public class baoma implements car public class facto...

設計模式(二) 工廠模式

前言 我在面試的時候,有時候會問到候選人有沒有熟悉的設計模式,一般大部分候選人會選擇說熟悉單例和工廠 也有部分人會說熟悉觀察者 如果我進一步問候選人是如何應用工廠模式的,10個候選人有10個會舉連線sqlserver,oracle,mysql等不同資料庫時會用工廠模式產生不同的連線的例子。omg,我...