工廠模式
抽象工廠模式
簡單工廠適用於工廠類負責建立的物件較少的場景,且客戶端只需要傳入工廠類的引數,對於如何創
建物件的邏輯不需要關心。
首先定義乙個介面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,我...