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) { }
}
}