您的位置:首页 > 其它

关于装饰模式的一个小例子

2017-11-22 15:05 555 查看
今天看了看装饰模式,感觉理论很好理解,但实际用起来,还是有一点问题。于是写了小例子,帮助自己理解

。(关于什么是装饰模式我就不多说了,网上一大把。)如下:

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写的版本弄出来。。。今天就先到这里了


输出结果如图片所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: