軟體設計不是為了設計程式,
而是為了設計出好的程式,才去學習軟體設計。
那麼前面大致介紹完模式,
進到所謂的工廠模式,
如果說在此之前是連線路徑缺失,
實際上只要找到關鍵字就能對答如流的話題,
那在這之後,就是稍微需要翻找組合才能知道的東西,
接下來的內容.
並且筆者的程式大多是為了展示而去撰寫,
而非需要而去撰寫的,
可別為了展現而去寫那麼多種工廠模式去在程式碼
不然就會是所謂的過度設計了。
首先當然當仁不讓從簡單的開始
簡單工廠模式(Simple Factory Pattern)
又有另一稱為靜態工廠模式,也是昨日所介紹的創建型模式(Creational Patterns)的一種。
簡單工廠模式(Simple Factory Pattern)。
它是工廠模式的一種簡化版本,用於封裝物件的創建過程,以便在客戶端代碼中使用單一的工廠方法來創建不同的物件。
通常由一個簡單的工廠類別來創建不同類型的物件,客戶端根據參數向工廠請求特定類型的物件實例。
簡單工廠模式主要包含以下幾個元素:
Factory(工廠):負責創建產品的類別,通常只會有一個工廠類別。
Product(產品):定義產品的介面,是一個抽象類別或介面。
ConcreteProduct(具體產品):這是Product的實現類,它實現了產品接口中的方法,由Factory創建。
以程式碼來說,筆者看過有用if...else,或Switch,
筆者這邊用Dictionary來做個示範。
// 新的工廠類別
public class CarInformationFactory
{
// 私有的字典屬性
private Dictionary<string, ICarInfomationService> services;
// 私有的構造函數
private CarInformationFactory()
{
// 初始化字典屬性
services = new Dictionary<string, ICarInfomationService>();
services.Add("volvo", new VOLVOService());
services.Add("amc", new AMCService());
services.Add("tesla", new TeslaService());
}
// 實例方法
public ICarInfomationService CreateCarInformationService(string local)
{
// 檢查參數是否有效
if (services.ContainsKey(local.ToLower()))
{
// 從字典中返回對象
return services[local.ToLower()];
}
else
{
// 拋出異常
throw new ArgumentException("不支援的供應商");
}
}
}
// 用戶端程式碼
class Program
{
static void Main(string[] args)
{
// 創建工廠對象
CarInformationFactory factory = new CarInformationFactory();
// 使用工廠方法創建服務對象
ICarInfomationService volvoService = factory.CreateCarInformationService("volvo");
ICarInfomationService amcService = factory.CreateCarInformationService("amc");
ICarInfomationService teslaService = factory.CreateCarInformationService("tesla");
// 使用服務...
}
}
可以看到從以上所提的元素作為切入,
工廠類別(Factory Class):可以看到CarInformationFactory,就會是Factory Class的定義。
產品類別(Product Class):也就是定義產品的介面,而在這裡ICarInfomationService的作用就是Product Class。
具體產品類別(Concrete Product Class):可以看到Concrete Product Class,也就是具體實作的地方。
也就是VOLVOService、AMCService、TeslaService...。
最後從用戶端(Client)看入,以這個範例很明顯的,Client就是透過傳入參數Local,創建不同的具體產品。
簡單工廠模式是工廠模式的一種變體,通常只包含一個工廠類別,該類別負責根據傳遞的參數或條件創建不同的具體產品。
這種模式通常用於創建相關的物件,而不涉及多個不同的工廠類別。
從function專門負責創建繼承相同介面的物件的類別,但需要增加新的產品時,需要修改Factory Class。
昨日提過Creational Patterns是一種設計模式,主要是為了某些特定情境而去解決創建物件的問題,
那這個就是為了解決供應商問題的一種解法。
順帶一提,
簡單工廠模式不屬於 GoF 的 23 個經典設計模式之一喔!
所以還是得學其他23個