Design Pattern - Simple Factory

摘要:Design Pattern - Simple Factory

其實一直有在閱讀Design Pattern的東西,可惜的是專案的類型一直沒辦法實做,

以至於每次讀過就忘了,趁著今日空閒加上部落格很久沒有新知了,於是乾脆自己實做

一個工廠,之前閱讀相關文章,看完雖然懂了,可是沒有一個實際的例子,因此印象總

不深刻,想想乾脆直接拿生活的例子舉例,這樣總算比較好了解了,以下是我閱讀過後

消化完的結果。

 

  • 把工廠模式想像為一個專門生產工廠
  • 工廠裡面有生管部門,專管製造流程 (Class or Interface)
  • 工廠裡面有生產製造的單位(Class)

 

每個產線雖然都有裝罐、貼標的流程,但在魚罐頭的部分可能用的是鐵罐,

而牛頭可能用的是鋁罐。

 

 

以下是自己腦補的情節,老王是一家罐頭經銷商,由於公司銷售新增產品而找到罐頭工廠OEM,

於是老王將需要生產的BOM表交由工廠。

工廠接到訂單後,把上由生管單位排定流程,而生產單位則配合生管的流程將產品生產出來。

 

這就是Simple Factory模式。

 

設定一下起始參數

以下是我的罐頭工廠類、生管類、魚產業類、牛產線類

namespace SimpleFactory
{
    class 罐頭工廠
    {
        public static void Main(string[] args){
            string Kind;

            生管 factory;

            Kind = args[0];

            factory = new 生管();

            switch (Kind)
            {
                case "牛":
                    factory = new 牛生產課();
                    break;
                case "魚":
                    factory = new 魚生產課();
                    break;
            }
            factory.Kind = Kind;
            factory.Packing();
            factory.StickyTag();

            Console.ReadLine();
        }               
    }
}
    


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleFactory
{
    class 生管
    {
        private string _Kind = string.Empty;

        public string Kind
        {
            get { return _Kind; }
            set { _Kind = value; }
        }  

        public virtual void Packing(){

        }
        public virtual void StickyTag() { 

        }
    }
}



namespace SimpleFactory
{
    class 魚生產課 : 生管
    {
        public override void Packing()
        {            
            Console.WriteLine("裝鋁罐");
        }

        public override void StickyTag()
        {
            Console.WriteLine("貼"+ Kind +"的條碼的標籤");
        }
    }
}


namespace SimpleFactory
{
    class 牛生產課 : 生管
    {
        public override void Packing()
        {
            Console.WriteLine("裝鐵罐");
        }

        public override void StickyTag()
        {
            Console.WriteLine("貼"+ Kind +"的條碼標籤");
        }
    }
}

 

執行結果:

 

這裡就有的實際的例子詳細說明了Simple Factory

Simple Factory Pattern Side by Side with Abstract Pattern