簡單工廠模式,屬於創建型模式,它提供了一種創建對象的最佳方式。在工廠模式中,我們創建對象時不會對客戶端暴露創建邏輯,而是通過一個統一的介面來指向新創建的對象。 介紹 在現實生活中,當我們去 4S 店購車時,我們不用考慮汽車的各個部件是如何生產的,而就可以提走一輛愛車。同樣的,在軟體開發過程中,當我們 ...
簡單工廠模式,屬於創建型模式,它提供了一種創建對象的最佳方式。在工廠模式中,我們創建對象時不會對客戶端暴露創建邏輯,而是通過一個統一的介面來指向新創建的對象。
介紹
在現實生活中,當我們去 4S 店購車時,我們不用考慮汽車的各個部件是如何生產的,而就可以提走一輛愛車。同樣的,在軟體開發過程中,當我們需要訪問數據時,可以使用這種方法直接獲取到數據,而不用考慮數據的底層存儲是使用哪種存儲方式。
類圖描述
從上述類圖中我們可以發現,IShape 為介面類型,定義了所有形狀類型所具有的行為,然後具體的類型分別繼承該介面並實現相應行為。接著又定義了一個 ShapeFactory 來統一所有類型的創建,最後,上層通過調用 ShapeFactory 並轉遞相應參數來獲取具體類型的實例對象。
代碼實現
1、創建介面 IShape
public interface IShape
{
void Draw();
}
2、定義相應形狀類並繼承 IShape 介面
public class Circle:IShape
{
public void Draw()
{
Console.WriteLine("I am a Circle");
}
}
public class Rectangle:IShape
{
public void Draw()
{
Console.WriteLine("I am a Rectangle");
}
}
public class Square:IShape
{
public void Draw()
{
Console.WriteLine("I am a Square");
}
}
3、創建一個工廠,用於生產指定類型的實體類對象
public enum ShapeType
{
Circle,
Rectangle,
Square,
}
public class ShapeFactory
{
public IShape GetShape(ShapeType shapeType)
{
IShape shape = null;
switch (shapeType)
{
case ShapeType.Circle:
shape = new Circle();
break;
case ShapeType.Rectangle:
shape = new Rectangle();
break;
case ShapeType.Square:
shape = new Square();
break;
}
return shape;
}
}
4、上層調用
class Program
{
static void Main(string[] args)
{
var factory = new ShapeFactory();
IShape shape = factory.GetShape(ShapeType.Rectangle);
shape.Draw();
Console.ReadKey();
}
}
總結
從上述類圖我們可以發現,使用工廠模式可以對複雜對象的創建提供了統一管理。每增加一個類型,都需要增加一個具體類和修改相應的工廠類,對於這一點,在一定程度上會增加系統發雜度。同時對於簡單對象的創建,如果也使用這種方式的話就不太合適。