1. 程式人生 > >設計模式系列 - 簡單工廠模式

設計模式系列 - 簡單工廠模式

簡單工廠模式,屬於建立型模式,它提供了一種建立物件的最佳方式。在工廠模式中,我們建立物件時不會對客戶端暴露建立邏輯,而是通過一個統一的介面來指向新建立的物件。

介紹

在現實生活中,當我們去 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();
    }
}

總結

從上述類圖我們可以發現,使用工廠模式可以對複雜物件的建立提供了統一管理。每增加一個型別,都需要增加一個具體類和修改相應的工廠類,對於這一點,在一定程度上會增加系統發雜度。同時對於簡單物件的建立,如果也使用這種方式的話就不太合適。