我: 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飾品"; } } }