簡單工廠模式屬於建立型模式,又爲靜態工廠方法模式,是由一個工廠對象決定生產哪種產品,既是由工廠對象建立哪一個類的實例。javascript
Factory(工廠類) --> Product(具體產品) --> IProduct(抽象概念圖)java
在現實生活中,咱們以生產汽車爲例。假設一個汽車的代工生產商,它目前可以生產一種便民的汽車 ACar
,因爲改革開放,今生產商接觸了國外的汽車生產商,也逐步爲國外公司代工生產汽車。此時,代工生廠商已經有本身嫺熟的生產技術和流程,其如今要代工生產 BCar
, OCar
, PCar
。代碼均以 TypeScript
實現。ui
abstract class ICar {
public abstract drive(): void;
}
複製代碼
class ACar extends ICar {
public drive(): void {
console.log('ACar is driven.');
}
}
class BCar extends ICar {
public drive(): void {
console.log('BCar is driven.');
}
}
class OCar extends ICar {
public drive(): void {
console.log('OCar is driven.');
}
}
class PCar extends ICar {
public drive(): void {
console.log('PCar is driven.');
}
}
複製代碼
class CarFactory {
public createCar(carType: string): ICar {
let myCar: ICar;
switch (carType) {
case 'aCar':
myCar = new ACar();
break;
case 'bCar':
myCar = new BCar();
break;
case 'oCar':
myCar = new OCar();
break;
case 'pCar':
myCar = new PCar();
break;
}
return myCar;
}
}
複製代碼
class client {
public create(): void {
let factory: CarFactory = new CarFactory();
let oCar: OCar = factory.createCar('oCar');
oCar.dirve();
let aCar: ACar = factory.createCar('aCar');
aCar.drive();
}
}
複製代碼
這樣,當咱們的客戶要什麼車的時候,直接調用工廠類來生產所需的汽車便可。spa
優勢: 使用戶根據不一樣的參數來得到各自對應的類實例,避免了直接實例化類,實現了低耦合。code
缺點: 可實例化的類型在編譯期間就已經被肯定了,若是增長新的類型,則須要修改工廠類,違背了開放封閉原則(ASD)。簡單工廠模式須要知道所要生產的種類,當子類過多或者子類層次過多時不適合使用。cdn