建立型:工廠模式-簡單工廠

風吹De麥浪發表於2023-03-02

定義

  之所以叫簡單工廠是因為真的非常簡單,只要一個工廠(函式)就可以了,如果把被建立的物件稱為產品,把建立產品的物件或者方法稱為工廠,那麼只需要傳入不同的引數,就可以返回不同的產品(例項),這種模式就叫簡單工廠模式

簡單工廠-餐館點菜

工廠模式其實就是將建立物件的過程單獨封裝在一個工廠中

它很像我們去餐館點菜:比如說點一份辣椒炒肉,我們不用關心肉是切絲還是塊狀、用紅辣椒還是其他辣椒等這些菜品製作過程中的問題,我們只關心擺上桌那道菜

在工廠模式裡,我傳參這個過程就是點菜,工廠函式里面運轉的邏輯就相當於炒菜的廚師和上桌的服務員做的那部分工作——這部分工作我們同樣不用關心,我們只要能拿到工廠交付給我們的例項結果就行了

簡單工廠程式碼

如下程式碼在工廠方法中透過不同的型別引數返回不同的車例項。

在簡單工廠模式中建立例項的方法通常為靜態(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()

優點

  • 工廠方法中可以很方便的插入你需要的邏輯判斷,這樣可以決定在什麼時候建立哪一個產品類的例項,外部可以免除直接建立產品物件的責任,而僅僅“消費”產品;簡單工廠模式透過這種做法實現了對責任的分割,它提供了專門的工廠類用於建立物件
  • 外部無須知道所建立的具體產品類的類,只需要知道具體產品類所對應的引數即可,對於一些複雜的類名,透過簡單工廠模式可以減少使用者的記憶量。

缺點

  • 簡單工廠類集中了所有產品建立邏輯,一旦不能正常工作,整個系統都要受到影響。
  • 簡單工廠模式負責的產品過多時,程式碼可能會很長,在一定程式上增加了系統的複雜度和可讀性。
  • 展困難,一旦新增新產品就不得不修改工廠邏輯,同樣破壞了“開閉原則”;在產品型別較多時,有可能造成工廠邏輯過於複雜,不利於系統的擴充套件和維護。

對於產品種類相對較少的情況,使用簡單工廠模式非常簡潔。外部只需要傳入工廠類的引數,不需要關心如何建立物件的邏輯,可以很方便地建立所需產品。

小結

  1. 簡單工廠模式非常簡單隻要提供一個工廠即可,將建立物件的過程單獨封裝
  2. 同時它的應用場景也非常容易識別:構造多個不同例項的地方,我們應該想到簡單工廠;
  3. 在寫了大量建構函式、呼叫了大量的 new、自覺非常不爽的情況下,我們就應該思考是不是可以掏出工廠模式重構我們的程式碼了。

簡單工廠關注的是不同的產品(物件),它的特點是“簡單粗暴”,透過一個含參的工廠方法,我們可以在工廠中例項化任何產品類,上至飛機火箭,下至土豆麵條,無所不能。

 

相關文章