工廠方法模式(Factory Method Pattern)是一種創建型模式,旨在提供一種方式來創建物件,並隱藏實際創建物件的細節。以下是工廠模式的四個要素:
簡介
- 模式名稱:
工廠方法模式
- 問題:
需要一種方式來創建物件,並將創建物件的細節隱藏起來。
- 解決方案:
使用一個工廠類別來封裝物件的創建邏輯。客戶端只需要提供所需物件的參數,並由工廠類別負責創建物件。
- 結果:
隱藏了創建物件的細節,使得客戶端可以輕鬆地獲取所需物件。
優點
避免了創建者和產品之間的緊密耦合。
S 單一職責原則。將產品的功能單一化,只需要做自己的任務就好。
O 開放/封閉原則。可以在不修改當前程式碼的情況下將新類型的產品引入。
缺點
程式碼隨著規模將變得越來越複雜
簡單工廠模式(Simple Factory Pattern):
以下我們來用食品工廠當作範例範例,其產品為牛肉麵、拉麵、義大利麵。
public interface IFood
{
void Make();
}
public class BeefNoodle : IFood
{
public void Make()
{
Console.WriteLine("製作牛肉麵...");
}
}
public class Ramen : IFood
{
public void Make()
{
Console.WriteLine("製作拉麵...");
}
}
public class Spaghetti : IFood
{
public void Make()
{
Console.WriteLine("製作義大利麵...");
}
}
public class FoodFactory
{
public IFood CreateFood(string foodType)
{
switch (foodType.ToLower())
{
case "beefnoodle":
return new BeefNoodle();
case "ramen":
return new Ramen();
case "spaghetti":
return new Spaghetti();
default:
throw new ArgumentException("Invalid food type");
}
}
}
public class Client
{
public void Main()
{
FoodFactory factory = new FoodFactory();
IFood food1 = factory.CreateFood("beefnoodle");
food1.Make();
IFood food2 = factory.CreateFood("ramen");
food2.Make();
IFood food3 = factory.CreateFood("spaghetti");
food3.Make();
}
}
在以上的範例中,簡單工廠模式主要是在 FoodFactory 類別中進行了產品的建立,而客戶端需要透過工廠來取得產品物件。
工廠方法模式(Factory Method Pattern):
public interface IFood
{
void Make();
}
public class BeefNoodle : IFood
{
public void Make()
{
Console.WriteLine("製作牛肉麵...");
}
}
public class Ramen : IFood
{
public void Make()
{
Console.WriteLine("製作拉麵...");
}
}
public class Spaghetti : IFood
{
public void Make()
{
Console.WriteLine("製作義大利麵...");
}
}
public interface IFoodFactory
{
IFood CreateFood();
}
public class BeefNoodleFactory : IFoodFactory
{
public IFood CreateFood()
{
return new BeefNoodle();
}
}
public class RamenFactory : IFoodFactory
{
public IFood CreateFood()
{
return new Ramen();
}
}
public class SpaghettiFactory : IFoodFactory
{
public IFood CreateFood()
{
return new Spaghetti();
}
}
public class Client
{
public void Main()
{
IFoodFactory factory1 = new BeefNoodleFactory();
IFood food1 = factory1.CreateFood();
food1.Make();
IFoodFactory factory2 = new RamenFactory();
IFood food2 = factory2.CreateFood();
food2.Make();
IFoodFactory factory3 = new SpaghettiFactory();
IFood food3 = factory3.CreateFood();
food3.Make();
}
}
在以上的範例中,工廠方法模式則是把產品的建立交由工廠子類別來實現,而客戶端只需要透過工廠介面與產品介面來使用產品。
以上是 Factory Method Pattern 的二種不同的實作方式,可以根據不同的需求來選擇適合的方式來實現。
Factory Method Pattern的重點整理:
-
工廠方法模式是一種創建型設計模式,它可以將對象的創建過程封裝在一個工廠中,使得客戶端不需要知道如何創建對象。
-
工廠方法模式通常包含一個抽象工廠類別和多個具體工廠類別,每個具體工廠類別負責創建一種產品。
-
工廠方法模式的核心是工廠方法,這個方法用於創建對象,並且返回創建的對象給客戶端使用。
-
工廠方法模式可以解決客戶端如何創建對象的問題,同時也可以方便地添加新的產品,而不需要修改現有的代碼。
-
工廠方法模式可以與其他設計模式結合使用,例如抽象工廠模式、單例模式等。
-
在C#中實現工廠方法模式,通常使用一個抽象工廠類別和多個具體工廠類別,以及一個產品介面和多個具體產品類別。