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;
}
做完好玩多了