首先網上的各種理論感覺沒有那麼好理解,每個部落格的術語也都千奇百怪,直接通過**演示最直接,最好理解,然後你再想去看理論,就輕鬆的很了。核心思想就是:代替原來的new物件的方式,通過工廠去生成,看起來不是new而已。
(1) 簡單工廠模式( 靜態工廠模式 )
在簡單工廠模式中可以根據引數的不同返回不同的例項,這種方式最簡單,只是進行了簡單的封裝,平時咱們也都用過類似的思想步驟:定義規範介面類或父類 -> 子類實現 ->建立工廠類 ->over
public
inte***ce
car
public
class
aodicar
implements
car@override
public
void
make()
}
public
class
baomacar
implements
car@override
public
void
make()
}
public
class
ca***ctoryif(
"aodi"
.equals
(type)
)return null;
}}
public
class
testfactory
}
是不是簡單得很?既然有了這種工廠模式,為啥還會有下邊的工廠方法模式呢??(2)工廠方法模式這就要從開閉原則說起了:官方術語我就不copy了,簡單來說就是我現在要新加乙個(特斯拉車)實現類,不要修改原來的邏輯。簡單工廠模式這種就需要再ca***ctory類中新新增 if else 進行判斷。
因此引出下邊這種工廠模式…
簡單來說。改進點就是每乙個實現類都對應乙個單獨的工廠,a->afactory,b->bfactorycar、aodicar、baomacar類保持不變
public
inte***ce
abstractfactory
public
class
aodica***ctory
implements
abstractfactory
}
public
class
baomaca***ctory
implements
abstractfactory
}
-------------end----------------
使用方法:
public
class
testfactory
}
這種方式要是新增(特斯拉)實現類,只需要建立單獨的工廠,對之前的業務**不會嵌入。第一種存在的問題解決,同時會發現模擬第一種工廠模式多,結構也會更複雜。所以不存在絕對的哪種方式好,適合自己專案的就是好的,選的時候也不需要太糾結,各有各的好處。
個人感覺這種抽象工廠模式和工廠方法模式的界限不是很清楚,兩者在**結構上簡單一變就會變成另一種模式。工廠方法模式針對的是一類產品,比如就是生產手機。而抽象工廠模式針對的是乙個產品組,比如寶馬,我既要生產車,又要生產手錶等其他產品。
public
inte***ce
watch
public
class
aodiwatch
implements
watch
@override
public
void
makewatch()
}
public
class
baomawatch
implements
watch
@override
public
void
makewatch()
}
public
inte***ce
abstractfactory
使用方法:
public
class
testfactory
}
結束:其實能看的出來抽象工廠模式和工廠方法模式差別不大的,抽象工廠模式新增乙個其他型別的產品也需要修改之前的工廠邏輯的。a公司有1,2,3這三種產品,b公司也有1,2,3三種,這樣的比較適合使用抽象工廠。單一產品的話就選擇工廠方法模式或者簡單工廠模式。。還是那句話不要侷限說是那種模式,靈活運用這種思想即可。
java設計模式 三種工廠模式
工廠模式提供建立物件的介面。工廠模式分為三類 簡單工廠模式 factory 工廠方法模式 factory method 和抽象工廠模式 abstract factory gof在 設計模式 中將工廠模式分為兩類 工廠方法模式 factory method 和抽象工廠模式 abstract facto...
Java三種工廠設計模式
乙個栗子 我喜歡吃麵條,抽象 乙個麵條基類 介面也可以 這是產品的抽象類。public abstract class inoodles 程式設計師加班必備也要吃泡麵 具體的產品類 public class paonoodles extends inoodles還有我最愛吃的家鄉的幹扣面 具體的產品類...
三種工廠的設計模式
二 三種設計模式的uml類圖 三 三種設計模式的源 四 總結分析 例項化物件的時候不再使用 new object 形式,可以根據使用者的選只需要給出具體 例項的描述給工廠,工廠就會自動返回具體的例項物件。擇條件來例項化相關的類。對於客戶端來說,去除了具體的類的依賴。工廠方法模式是對簡單工廠模式進一步...