定義
之所以叫簡單工廠是因為真的非常簡單,只要一個工廠(函式)就可以了,如果把被創建的物件稱為產品,把創建產品的物件或者方法稱為工廠,那么只需要傳入不同的引數,就可以回傳不同的產品(實體),這種模式就叫簡單工廠模式,
簡單工廠-餐館點菜
工廠模式其實就是將創建物件的程序單獨封裝在一個工廠中,
它很像我們去餐館點菜:比如說點一份辣椒炒肉,我們不用關心肉是切絲還是塊狀、用紅辣椒還是其他辣椒等這些菜品制作程序中的問題,我們只關心擺上桌那道菜,
在工廠模式里,我傳參這個程序就是點菜,工廠函式里面運轉的邏輯就相當于炒菜的廚師和上桌的服務員做的那部分作業——這部分作業我們同樣不用關心,我們只要能拿到工廠交付給我們的實體結果就行了,
簡單工廠代碼
如下代碼在工廠方法中通過不同的型別引數回傳不同的車實體,
在簡單工廠模式中創建實體的方法通常為靜態(static)方法,因此簡單工廠模式(Simple Factory Pattern)又叫作靜態工廠方法模式(Static Factory Method Pattern),這里代碼還是常規通過物件來呼叫工廠方法,如果需要只需在下面代碼中,在方法前面加上static 即可,
class BydCar { constructor (name, time) { this.carName = name this.time = time } runCarName () { console.log(this.carName) } } class JeepCar { constructor (name, time) { this.carName = name this.time = time } runCarName () { console.log(this.carName) } } class BenzCar { constructor (name, time) { this.carName = name this.time = time } runCarName () { console.log(this.carName) } }
class CarFactory {
// 創建車的工廠 createCar (carType, name, time) { if (carType === 'byd') { return new BydCar(name, time) } if (carType === 'jeep') { return new JeepCar(name, time) } if (carType === 'benz') { return new BenzCar(name, time) } } } // 工廠物件 const carFactory = new CarFactory() // 生成各個具體的實體 const bydCar = carFactory.createCar('byd', 'byd 汽車', '2022-10-20') const jeepCar = carFactory.createCar('jeep', 'jeep 汽車', '2022-10-20') const benzCar = carFactory.createCar('benz', 'benz 汽車', '2022-10-20') // 各個實體干自己的事情 bydCar.runCarName() jeepCar.runCarName() benzCar.runCarName()
優點
- 工廠方法中可以很方便的插入你需要的邏輯判斷,這樣可以決定在什么時候創建哪一個產品類的實體,外部可以免除直接創建產品物件的責任,而僅僅“消費”產品;簡單工廠模式通過這種做法實作了對責任的分割,它提供了專門的工廠類用于創建物件,
- 外部無須知道所創建的具體產品類的類,只需要知道具體產品類所對應的引數即可,對于一些復雜的類名,通過簡單工廠模式可以減少使用者的記憶量,
缺點
- 簡單工廠類集中了所有產品創建邏輯,一旦不能正常作業,整個系統都要受到影響,
- 簡單工廠模式負責的產品過多時,代碼可能會很長,在一定程式上增加了系統的復雜度和可讀性,
- 擴展困難,一旦添加新產品就不得不修改工廠邏輯,同樣破壞了“開閉原則”;在產品型別較多時,有可能造成工廠邏輯過于復雜,不利于系統的擴展和維護,
對于產品種類相對較少的情況,使用簡單工廠模式非常簡潔,外部只需要傳入工廠類的引數,不需要關心如何創建物件的邏輯,可以很方便地創建所需產品,
小結
- 簡單工廠模式非常簡單只要提供一個工廠即可,將創建物件的程序單獨封裝,
- 同時它的應用場景也非常容易識別:構造多個不同實體的地方,我們應該想到簡單工廠;
- 在寫了大量建構式、呼叫了大量的 new、自覺非常不爽的情況下,我們就應該思考是不是可以掏出工廠模式重構我們的代碼了,
簡單工廠關注的是不同的產品(物件),它的特點是“簡單粗暴”,通過一個含參的工廠方法,我們可以在工廠中實體化任何產品類,上至飛機火箭,下至土豆面條,無所不能,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/545608.html
標籤:JavaScript
