設計模式——簡單工廠模式

1. 簡介

定義

簡單工廠模式屬於建立型模式,又爲靜態工廠方法模式,是由一個工廠對象決定生產哪種產品,既是由工廠對象建立哪一個類的實例。javascript

分析

簡單工廠模式.png

Factory(工廠類) --> Product(具體產品) --> IProduct(抽象概念圖)java

  • Factory:工廠類,簡單工廠模式的核心部分,主要負責生產全部的產品,也就是實例。外界直接調用工廠類的方法來生產本身所須要的產品,也就是建立本身所需的實例,不須要知道其內部邏輯。
  • Product:具體產品類
  • IProduct:概念圖,抽象產品,是具體產品類的公共接口,描述具體產品的屬性,行爲等。簡單工廠模式建立的全部對象的父類。

2. 簡單實現

在現實生活中,咱們以生產汽車爲例。假設一個汽車的代工生產商,它目前可以生產一種便民的汽車 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

3. 使用場景

  • 工廠類須要生產的不一樣種類產品比較少
  • 客戶不須要知道工廠類生產產品的邏輯,只知道交付給工廠類的參數指標

4. 優缺點

優勢: 使用戶根據不一樣的參數來得到各自對應的類實例,避免了直接實例化類,實現了低耦合。code

缺點: 可實例化的類型在編譯期間就已經被肯定了,若是增長新的類型,則須要修改工廠類,違背了開放封閉原則(ASD)。簡單工廠模式須要知道所要生產的種類,當子類過多或者子類層次過多時不適合使用。cdn

相關文章
相關標籤/搜索