一、C#工廠模式概覽
C#工廠模式是一種創建型設計模式,旨在解決對象創建過程中某些問題。通常情況下,我們在代碼中創建對象時都是通過new操作符進行的,但是這種方式會使得代碼緊耦合,難以維護和拓展。因此,工廠模式通過把對象的創建過程抽象出來,讓客戶端不需要知道具體對象的創建過程,從而降低系統的耦合性和複雜度。
工廠模式主要由三個組成部分:抽象工廠、具體工廠和抽象產品、具體產品。其中,抽象工廠定義了工廠的行為,負責返回抽象產品;具體工廠實現了抽象工廠並返回具體產品;抽象產品定義了產品的行為,具體產品實現了抽象產品的行為。
二、工廠模式的優點
2.1 符合單一職責原則:工廠模式把對象的創建過程集中在一個地方,而且只負責創建對象,符合單一職責原則。
2.2 降低了系統的耦合度:客戶端只需要知道抽象產品的介面,並不需要知道具體產品的實現細節。因此,系統不會因為產品的改變而受到很大的影響。
2.3 易於擴展:工廠模式只需要增加相應的具體產品和具體工廠類就可以擴展新增的產品功能,符合開放封閉原則。
三、工廠模式的實現
1. 簡單工廠模式
簡單工廠模式是工廠模式的一種變體。簡單工廠模式中,客戶端只需要傳入一個參數,而工廠類根據這個參數來判斷要創建哪一個具體產品類的實例。這種模式雖然實現簡單,但是卻不符合開放封閉原則。
示例代碼:
public enum ProductType
{
TypeA,
TypeB
}
public abstract class Product
{
public abstract void Method();
}
public class ConcreteProductA : Product
{
public override void Method()
{
Console.WriteLine("This is Concrete Product A's Method");
}
}
public class ConcreteProductB : Product
{
public override void Method()
{
Console.WriteLine("This is Concrete Product B's Method");
}
}
public class SimpleFactory
{
public static Product Create(ProductType type)
{
Product product = null;
switch (type)
{
case ProductType.TypeA:
product = new ConcreteProductA();
break;
case ProductType.TypeB:
product = new ConcreteProductB();
break;
default:
break;
}
return product;
}
}
2. 工廠方法模式
工廠方法模式通過定義一個工廠介面來創建抽象產品類的實例,具體的產品實現則由具體的工廠類來實現。工廠方法模式比簡單工廠模式更符合開放封閉原則,但是它也會導致類的個數增加。
示例代碼:
public abstract class Factory
{
public abstract Product Create();
}
public abstract class Product
{
public abstract void Method();
}
public class ConcreteProductA : Product
{
public override void Method()
{
Console.WriteLine("This is Concrete Product A's Method.");
}
}
public class ConcreteProductB : Product
{
public override void Method()
{
Console.WriteLine("This is Concrete Product B's Method.");
}
}
public class ConcreteFactoryA : Factory
{
public override Product Create()
{
return new ConcreteProductA();
}
}
public class ConcreteFactoryB : Factory
{
public override Product Create()
{
return new ConcreteProductB();
}
}
3. 抽象工廠模式
抽象工廠模式提供了一種創建一系列具有相關主題的對象的介面,而無需指定它們具體的類。這種模式對於產品系列的創建非常有用。
示例代碼:
public interface IColor
{
void Fill();
}
public class Red : IColor
{
public void Fill()
{
Console.WriteLine("Red");
}
}
public class Green : IColor
{
public void Fill()
{
Console.WriteLine("Green");
}
}
public class Blue : IColor
{
public void Fill()
{
Console.WriteLine("Blue");
}
}
public interface IShape
{
void Draw();
}
public class Square : IShape
{
public void Draw()
{
Console.WriteLine("Square");
}
}
public class Circle : IShape
{
public void Draw()
{
Console.WriteLine("Circle");
}
}
public class Rectangle : IShape
{
public void Draw()
{
Console.WriteLine("Rectangle");
}
}
public abstract class AbstractFactory
{
public abstract IColor GetColor(string color);
public abstract IShape GetShape(string shape);
}
public class ShapeFactory : AbstractFactory
{
public override IColor GetColor(string color)
{
return null;
}
public override IShape GetShape(string shape)
{
IShape s = null;
switch (shape)
{
case "Circle":
s = new Circle();
break;
case "Rectangle":
s = new Rectangle();
break;
case "Square":
s = new Square();
break;
default:
break;
}
return s;
}
}
public class ColorFactory : AbstractFactory
{
public override IColor GetColor(string color)
{
IColor c = null;
switch (color)
{
case "Red":
c = new Red();
break;
case "Green":
c = new Green();
break;
case "Blue":
c = new Blue();
break;
default:
break;
}
return c;
}
public override IShape GetShape(string shape)
{
return null;
}
}
四、工廠模式的使用場景
4.1 當一個類不知道它所需要的對象的類,可以使用工廠模式
4.2 當一個類希望由它的子類來指定它所創建的對象時,可以使用工廠模式
4.3 當我們需要創建一些相關的對象時,可以使用工廠模式
五、總結
工廠模式是一種創建型設計模式,它能夠把對象的創建過程從客戶端代碼中抽象出來,從而降低代碼的耦合性和複雜度。工廠模式可以分為簡單工廠模式、工廠方法模式和抽象工廠模式。在實際應用中,我們應該根據需求選用合適的工廠模式,使得代碼更加靈活和易於擴展。
原創文章,作者:DTHFR,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/334772.html