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

今天看了看装饰模式,感觉理论很好理解,但实际用起来,还是有一点问题。于是写了小例子,帮助自己理解大笑。(关于什么是装饰模式我就不多说了,网上一大把。)如下:

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

输出结果如图片所示:



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值