2016年3月6日 星期日

範本方法模式 Template Method Pattern

PM: 小奇奇,小奇奇
我:   0.0
PM: 最近營收很差,我發現我轉蛋賣太貴效果都不好
我:   那你就賣多種價錢的轉蛋阿,便宜到貴的
PM: 好像不錯喔,那我就把轉蛋的寶物都一樣,在依照不同的價錢給不同的屬性
PM: 想要省錢的就去轉比較便宜的
PM: 有錢人要神裝的就去轉貴的,好像也不錯
我:   0.0


所以這次的需求是,轉到的虛寶例如武器、裝備、飾品都是固定的
只有虛寶的屬性在變化,貴的就屬性比較好
所以這次使用範本方法模式寫寫看


首先先建立一個轉蛋的類別
    class Gashapon
    {
        public void ArmsItem()
        {
            Console.WriteLine("恭喜您獲得武器:" + getArmsItem());            
        }

        public void ArmorItem()
        {
            Console.WriteLine("恭喜您獲得盔甲:" + getArmorItem());            
        }

        public void AccessoriesItem()
        {
            Console.WriteLine("恭喜您獲得飾品:" + getAccessoriesItem());            
        }

        protected virtual string getArmsItem()
        {
            return "";
        }

        protected virtual string getArmorItem()
        {
            return "";
        }

        protected virtual string getAccessoriesItem()
        {
            return "";
        }   
    }
在建立3個不同價錢的轉蛋屬性Item
    //50元轉蛋的商品
    class Gashapon50 : Gashapon
    {
        protected override string getArmsItem()
        {
            return "+3武器";
        }

        protected override string getArmorItem()
        {
            return "+3盔甲";
        }

        protected override string getAccessoriesItem()
        {
            return "+3飾品";
        }
    }

    //500元轉蛋的商品
    class Gashapon500 : Gashapon
    {
        protected override string getArmsItem()
        {
            return "+7武器";
        }

        protected override string getArmorItem()
        {
            return "+7盔甲";
        }

        protected override string getAccessoriesItem()
        {
            return "+7飾品";
        }
    }

    //5000元轉蛋的商品
    class Gashapon5000 : Gashapon
    {
        protected override string getArmsItem()
        {
            return "+16武器";
        }

        protected override string getArmorItem()
        {
            return "+16盔甲";
        }

        protected override string getAccessoriesItem()
        {
            return "+16飾品";
        }
    }
主控台與完整的程式碼
using System;

namespace DesignPattern.TemplateMethodPattern
{
    class Run
    {
        static void Main()
        {
            Console.WriteLine("50元轉蛋:");
            Gashapon gash = new Gashapon50();
            gash.ArmsItem();
            gash.ArmorItem();
            gash.AccessoriesItem();

            Console.WriteLine("500元轉蛋:");
            gash = new Gashapon500();
            gash.ArmsItem();
            gash.ArmorItem();
            gash.AccessoriesItem();

            Console.WriteLine("5000元轉蛋:");
            gash = new Gashapon5000();
            gash.ArmsItem();
            gash.ArmorItem();
            gash.AccessoriesItem();

            Console.Read();
        }
    }

    class Gashapon
    {
        public void ArmsItem()
        {
            Console.WriteLine("恭喜您獲得武器:" + getArmsItem());            
        }

        public void ArmorItem()
        {
            Console.WriteLine("恭喜您獲得盔甲:" + getArmorItem());            
        }

        public void AccessoriesItem()
        {
            Console.WriteLine("恭喜您獲得飾品:" + getAccessoriesItem());            
        }

        protected virtual string getArmsItem()
        {
            return "";
        }

        protected virtual string getArmorItem()
        {
            return "";
        }

        protected virtual string getAccessoriesItem()
        {
            return "";
        }   
    }

    //50元轉蛋的商品
    class Gashapon50 : Gashapon
    {
        protected override string getArmsItem()
        {
            return "+3武器";
        }

        protected override string getArmorItem()
        {
            return "+3盔甲";
        }

        protected override string getAccessoriesItem()
        {
            return "+3飾品";
        }
    }

    //500元轉蛋的商品
    class Gashapon500 : Gashapon
    {
        protected override string getArmsItem()
        {
            return "+7武器";
        }

        protected override string getArmorItem()
        {
            return "+7盔甲";
        }

        protected override string getAccessoriesItem()
        {
            return "+7飾品";
        }
    }

    //5000元轉蛋的商品
    class Gashapon5000 : Gashapon
    {
        protected override string getArmsItem()
        {
            return "+16武器";
        }

        protected override string getArmorItem()
        {
            return "+16盔甲";
        }

        protected override string getAccessoriesItem()
        {
            return "+16飾品";
        }
    }
}


沒有留言:

張貼留言