using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Design_Pattern { public class Decorator : IExecute { void IExecute.Execute() { Console.WriteLine("装饰者模式执行......"); Person person = new Person(); // 定义一个镶嵌了绿宝石的法杖 IDecorator GreenStaff = new GreenGemStone(new Staff()); person.SetWeapon(GreenStaff); person.UseWeapon(); // 定义一个镶嵌了红宝石的法杖 IDecorator RedStaff = new RedGemStone(new Staff()); person.SetWeapon(RedStaff); person.UseWeapon(); } } /// /// 友情出演 人 类 /// public class Person { IDecorator m_Weapon; public void SetWeapon(IDecorator weapon) { m_Weapon = weapon; } public void UseWeapon() { m_Weapon.Attack(); } } /// /// 武器接口 /// public interface IDecorator { void Attack(); } /// /// 法杖类(被装饰者) /// public class Staff : IDecorator { public void Attack() { Console.WriteLine("法杖进行攻击,普通伤害"); } } /*-------------------- 以下是装饰类 --------------------*/ /// /// 宝石装饰抽象类 /// public abstract class GemStoneDecorator : IDecorator { IDecorator m_Weapon; // 实现接口 public virtual void Attack() { m_Weapon.Attack(); } public GemStoneDecorator(IDecorator weapon) { m_Weapon = weapon; } } /// /// 红宝石类(具体装饰类),增加攻击效果:增加眩晕效果 /// public class RedGemStone : GemStoneDecorator { public override void Attack() { base.Attack(); Console.WriteLine("镶嵌了红宝石的武器进行攻击,造成眩晕效果"); } public RedGemStone(IDecorator weapon) : base(weapon) { } } /// /// 绿宝石类(具体装饰类),增加攻击效果:增加降速效果 /// public class GreenGemStone : GemStoneDecorator { public override void Attack() { base.Attack(); Console.WriteLine("镶嵌了绿宝石的武器进行攻击,造成降速效果"); } public GreenGemStone(IDecorator weapon) : base(weapon) { } } }