工廠設計模式是一種建立型設計模式,它提供了一種建立物件的最佳方式,而無需暴露物件的建立邏輯。在工廠模式中,我們定義一個介面或抽象類,該介面或抽象類用於建立物件,但讓子類決定要例項化的類。工廠方法模式使類的例項化延遲到其子類。
下面是一個完整的C#實現案例:
首先,我們定義一個介面,用於建立物件:
public interface IAnimal
{
void Speak();
}
然後,我們定義兩個實現該介面的類:
public class Dog : IAnimal
{
public void Speak()
{
Console.WriteLine("狗說:汪,汪");
}
}
public class Cat : IAnimal
{
public void Speak()
{
Console.WriteLine("貓說:喵。");
}
}
接下來,我們定義一個工廠類,該類根據傳入的引數建立相應的物件:
public class AnimalFactory
{
public IAnimal GetAnimal(string animalType)
{
switch (animalType.ToLower())
{
case "dog":
return new Dog();
case "cat":
return new Cat();
default:
throw new ArgumentException("無效動物型");
}
}
}
最後,我們可以使用工廠類來建立物件:
AnimalFactory animalFactory = new AnimalFactory();
IAnimal dog = animalFactory.GetAnimal("dog");
dog.Speak(); // 輸出:狗說:汪汪
IAnimal cat = animalFactory.GetAnimal("cat");
cat.Speak(); // 輸出:貓說:喵
在這個例子中,我們使用工廠類來建立不同型別的動物物件,而不需要暴露物件的建立邏輯。這使得我們可以輕鬆地新增新的動物型別,而不需要修改現有的程式碼。
以下是一個抽象工廠的C#示例:
// 抽象產品介面
public interface IProduct
{
void Use();
}
// 具體產品A
public class ProductA : IProduct
{
public void Use()
{
Console.WriteLine("使用產品A");
}
}
// 具體產品B
public class ProductB : IProduct
{
public void Use()
{
Console.WriteLine("使用產品B");
}
}
// 抽象工廠介面
public interface IFactory
{
IProduct CreateProduct();
}
// 具體工廠A
public class FactoryA : IFactory
{
public IProduct CreateProduct()
{
return new ProductA();
}
}
// 具體工廠B
public class FactoryB : IFactory
{
public IProduct CreateProduct()
{
return new ProductB();
}
}
// 客戶端程式碼
public class Client
{
private IFactory factory;
public Client(IFactory factory)
{
this.factory = factory;
}
public void UseProduct()
{
IProduct product = factory.CreateProduct();
product.Use();
}
}
// 使用示例
Client clientA = new Client(new FactoryA());
clientA.UseProduct(); // 輸出:使用產品A
Client clientB = new Client(new FactoryB());
clientB.UseProduct(); // 輸出:使用產品B
在這個示例中,抽象工廠介面 IFactory
定義了一個 CreateProduct
方法,用於建立產品。具體工廠 FactoryA
和 FactoryB
實現了 IFactory
介面,並分別建立了具體產品 ProductA
和 ProductB
。客戶端程式碼 Client
接收一個工廠物件,並使用工廠物件建立產品並使用。這樣,客戶端程式碼就可以透過更換工廠物件來建立不同的產品。