設計模式系列 - 簡單工廠模式
阿新 • • 發佈:2018-12-07
簡單工廠模式,屬於建立型模式,它提供了一種建立物件的最佳方式。在工廠模式中,我們建立物件時不會對客戶端暴露建立邏輯,而是通過一個統一的介面來指向新建立的物件。
介紹
在現實生活中,當我們去 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();
}
}
總結
從上述類圖我們可以發現,使用工廠模式可以對複雜物件的建立提供了統一管理。每增加一個型別,都需要增加一個具體類和修改相應的工廠類,對於這一點,在一定程度上會增加系統發雜度。同時對於簡單物件的建立,如果也使用這種方式的話就不太合適。