設計模式-裝飾者(研習中)

design pattern

這一個模式不斷的思考跟循環,因此決定來寫看看,順便先來看看網路上的範本

https://github.com/EdisonChou/DesignPattern.Samples.CSharp 從這邊來看看 看他的具體實作的時候
 

 Component component = new Window();
 // 一次装饰
 Component componentSB = new ScrollBarDecorator(component);
 componentSB.Display();
 Console.WriteLine();
 // 二次装饰
 Component componentBB = new BlackBorderDecorator(componentSB);
 componentBB.Display();
 Console.ReadKey();

他的版本是這樣

但是這樣子讓我困擾了許久 我感覺裝是應該裝飾在本身 而不是NEW一個物件來做 

因此以仙劍奇俠傳的腳色為出發 攜帶武器當裝飾來思考配合這個PATTERN

https://github.com/tm731531/DesignPrectice/blob/master/DesignPrectice/Program.cs

        static void Main(string[] args)
        {
            Swordsman swordsman = new Swordsman(30);


            WeaponBase weapon = new Weapon();
            WeaponBase weapon2 = new Weapon();

            weapon = 紅櫻刀(weapon);
            weapon2 = 大砍刀(weapon2);
            var t2 = weapon.AttackUp();
            // 沒錯啊
            swordsman.GetWeapon(weapon);
            swordsman.Attack();
            swordsman.ShowWeapon();
            Console.WriteLine("");

            Console.WriteLine("換武器拉");
            Console.WriteLine("");

            swordsman.GetWeapon(weapon2);
            swordsman.Attack();
            swordsman.ShowWeapon();
            Console.ReadLine();
        }

        private static WeaponBase 大砍刀(WeaponBase weapon2)
        {
            weapon2 = new RedHair(weapon2);
            weapon2 = new Knife(weapon2);
            weapon2 = new Knife(weapon2);
            weapon2 = new Knife(weapon2);
            return weapon2;
        }

        private static WeaponBase 紅櫻刀(WeaponBase weapon)
        {
            weapon = new Knife(weapon);  //20
            weapon = new RedHair(weapon);  //9
            weapon = new LongHandle(weapon);//2
            weapon = new Handguard(weapon);//5
            return weapon;
        }

做完好玩多了