今天看了看装饰模式,感觉理论很好理解,但实际用起来,还是有一点问题。于是写了小例子,帮助自己理解。(关于什么是装饰模式我就不多说了,网上一大把。)如下:
public abstract class Hero
{
public abstract void skill();
}
public class Vayne : Hero
{
string name;
public Vayne(string name)
{
this.name = name;
}
public override void skill()
{
Console.WriteLine("{0}学习了技能",name);
//throw new NotImplementedException();
}
}
public abstract class heroSkill : Hero
{
protected Hero hero;
public heroSkill(Hero hero)
{
this.hero = hero;
}
public override void skill()
{
if(hero!=null)
{
hero.skill();
}
//throw new NotImplementedException();
}
}
public class SkillQ : heroSkill
{
private string skillQName;
public SkillQ(Hero hero,string skillQName) : base(hero)
{
this.skillQName = skillQName;
}
public override void skill()
{
base.skill();
Console.WriteLine("学习了技能Q:{0}",skillQName);
}
}
public class SkillW : heroSkill
{
private string skillWName;
public SkillW(Hero hero, string skillWName) : base(hero)
{
this.skillWName = skillWName;
}
public override void skill()
{
base.skill();
Console.WriteLine("学习了技能W:{0}", skillWName);
}
}
public class SkillE : heroSkill
{
private string skillEName;
public SkillE(Hero hero, string skillEName) : base(hero)
{
this.skillEName = skillEName;
}
public override void skill()
{
base.skill();
Console.WriteLine("学习了技能E:{0}", skillEName);
}
}
public class SkillR : heroSkill
{
private string skillRName;
public SkillR(Hero hero,string skillRName) : base(hero)
{
this.skillRName = skillRName;
}
public override void skill()
{
base.skill();
Console.WriteLine("学习了技能R:{0}", skillRName);
}
}
class Program
{
static void Main(string[] args)
{
Vayne c = new Vayne("薇恩");
SkillQ q = new SkillQ(c, "闪避突袭");
SkillW w = new SkillW(q, "圣银弩箭");
SkillE e = new SkillE(w, "恶魔审判");
SkillR r = new SkillR(e, "终极时刻");
r.skill();
Console.Read();
}
}
下次再把Java写的版本弄出来。。。今天就先到这里了
输出结果如图片所示: