2016年3月1日 星期二

工廠方法模式 Factory Pattern

這篇將由第一篇文章簡單工廠模式修改為工廠方法模式

第一篇 : 簡單工廠模式 Simple Factory Pattern

Gashapon.cs
using System;

namespace DesignPattern.FactoryPattern
{
    /*建立一個轉蛋的類別*/
    public class Gashapon
    {
        /*玩家被騙的金額*/
        private double _Amount = 0;

        public double Amount
        {
            get { return _Amount; }
            set { _Amount = value; }
        }

        /*玩家獲得的虛寶*/
        public virtual string GetItem()
        {
            string result = "";
            return result;
        }
    }

    class AdvancedItem : Gashapon
    {
        /*高級實體商品*/
        public override string GetItem()
        {
            /*高級實體商品邏輯運算,這邊簡略不實作*/
            return "高級實體商品";
        }
    }

    class GeneralItem : Gashapon
    {
        /*一般虛寶*/
        public override string GetItem()
        {
            /*一般爛虛寶邏輯運算,這邊簡略不實作*/
            return "一般爛虛寶";
        }
    }


    interface IFactory
    {
        Gashapon CreateGashapon();
    }

    class AdvancedFactory : IFactory
    {
        public Gashapon CreateGashapon()
        {
            return new AdvancedItem();
        }
    }

    class GeneralFactory : IFactory
    {
        public Gashapon CreateGashapon()
        {
            return new GeneralItem();
        }
    }

}

主控台

using System;

namespace DesignPattern.FactoryPattern
{
    class Run
    {
        static void Main(string[] args)
        {

            IFactory ghFactory = new AdvancedFactory();
            Gashapon gh = ghFactory.CreateGashapon();
            Console.WriteLine("大於1000元 : " + gh.GetItem());

            ghFactory = new GeneralFactory();
            gh = ghFactory.CreateGashapon();
            Console.WriteLine("小於1000元 : " + gh.GetItem());

            Console.Read();
        }
    }
}


工廠方法克服了簡單工廠違背開放-封閉原則的缺點,又維持了封裝物件建立過程的優點

沒有留言:

張貼留言