我: 是喔~恭喜
PM: 所以我想再弄一個活動
PM: 就是把轉蛋轉到的裝備可以再次轉蛋
我: .........
PM: 就是可利用轉蛋把裝備加上隨機四種屬性
PM: 例如XX裝備去轉蛋,轉蛋之後隨機增加裝備屬性
PM: 範例1: 力量 + 178 體 + 587 敏捷 + 20 智慧 + 50
PM: 範例2: 力量 + 58 體 + 1500 敏捷 + 35 智慧 + 98
PM: 轉一次50元,應該又可以在賺一波
我: 好的,交給我!
PM: 對了小奇,我可能還會加其他屬性,留點空間新增喔~
PM這次的需求一個某件裝備,可以加上N種屬性
再次翻一翻書,好像裝飾模式可以使用,來套套看好了!!
於是乎新增了一個
Armor.cs
using System; namespace DesignPattern.DecoratorPattern { /*裝備*/ class Armor { public Armor() {} private string name; public Armor(string name) { this.name = name; } public virtual void Show() { Console.WriteLine("[" + name + "]"); } } /*屬性*/ class Attribute : Armor { protected Armor component; public void Decorate(Armor component) { this.component = component; } public override void Show() { if (component != null) { component.Show(); } } } /*力量屬性*/ class STR : Attribute { private int _val { get; set; } public STR(int val) { _val = val; } public override void Show() { Console.Write(" 力量 +" + _val); base.Show(); } } /*體力屬性*/ class CON : Attribute { private int _val { get; set; } public CON(int val) { _val = val; } public override void Show() { Console.Write(" 體力 +" + _val); base.Show(); } } /*敏捷屬性*/ class DEX : Attribute { private int _val { get; set; } public DEX(int val) { _val = val; } public override void Show() { Console.Write(" 敏捷 +" + _val); base.Show(); } } /*智慧屬性*/ class WIT : Attribute { private int _val { get; set; } public WIT(int val) { _val = val; } public override void Show() { Console.Write(" 智慧 +" + _val); base.Show(); } } /*智力屬性*/ class INT : Attribute { private int _val { get; set; } public INT(int val) { _val = val; } public override void Show() { Console.Write(" 智力 +" + _val); base.Show(); } } /*精神屬性*/ class MEN : Attribute { private int _val { get; set; } public MEN(int val) { _val = val; } public override void Show() { Console.Write(" 精神 +" + _val); base.Show(); } } }新增主控台程式
Run.cs
using System; namespace DesignPattern.DecoratorPattern { class Run { static void Main() { Random rnd = new Random(); Armor ar = new Armor("金屬盔甲"); /* 裝備*/ /*PM第一種組合屬性*/ STR str = new STR(rnd.Next(100)); str.Decorate(ar); DEX dex = new DEX(rnd.Next(100)); dex.Decorate(str); CON con = new CON(rnd.Next(1000)); con.Decorate(dex); WIT wit = new WIT(rnd.Next(500)); wit.Decorate(con); wit.Show(); /*PM第二種組合屬性*/ MEN men = new MEN(rnd.Next(100)); men.Decorate(ar); INT _int = new INT(rnd.Next(100)); _int.Decorate(men); _int.Show(); Console.Read(); } } }