关于装饰模式的一个小例子
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写的版本弄出来。。。今天就先到这里了
输出结果如图片所示:
。(关于什么是装饰模式我就不多说了,网上一大把。)如下:
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写的版本弄出来。。。今天就先到这里了
输出结果如图片所示:
相关文章推荐
- 关于过滤器的一个例子(涉及到装饰模式)
- 关于复合模式、策略模式,工厂模式、观察者模式、装饰模式的一个好例子
- 用装饰模式优化代码的一个简单例子
- 关于一个简单的策略设计模式的例子
- C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介
- 在effective java中看到的两个比较精妙的例子,一个是建造者模式,一个是装饰器模式,故在此做一下笔记
- 用装饰模式优化代码的一个简单例子
- C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介
- 用装饰模式优化代码的一个简单例子
- 《软件架构与设计模式》关于 抽象工厂模式 的一个小例子
- 用装饰模式优化代码的一个简单例子
- 基于人吃饭的例子设计一个装饰设计模式:
- 关于合成模式的javascript的一个treeview例子
- C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介
- 关于utf-8 bom编码文件的一个例子
- 关于js内存泄露的一个好例子
- 关于多线程的一个例子(UI实时显示)
- 《设计模式》学习笔记(3)——一个学习创建型模式的例子
- java关于new出一个对象的例子
- 一个关于this的例子