新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍了C#装饰器模式怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#装饰器模式怎么实现文章都会有所收获,下面我们一起来看看吧。
专业成都网站建设公司,做排名好的好网站,排在同行前面,为您带来客户和效益!创新互联建站为您提供成都网站建设,五站合一网站设计制作,服务好的网站设计公司,网站制作、做网站负责任的成都网站制作公司!
首先肯定是抽象基类。
public abstract class OurStrategy { public abstract void Play(string msg); }
通常,在上半场,我们一般都使用防守阵型。
public class OurDefaultStategy : OurStrategy { public override void Play(string msg) { Console.WriteLine("上半场4-1-2-1防守阵型"); } }
下半场,会根据上半场的态势而调整阵型。也就是需要实现OurStrategy这个抽象类。不过,先不急,我们还得先抽象出一个实现OurStrategy这个抽象类、充当装饰器的一个抽象类。
public abstract class OurDecorator : OurStrategy { private OurStrategy _ourStrategy; public OurDecorator(OurStrategy ourStrategy) { this._ourStrategy = ourStrategy; } public override void Play(string msg) { if (_ourStrategy != null) { _ourStrategy.Play(msg); } } }
以上,这个充当装饰器的抽象类,接收某个实现OurStrategy抽象基类的子类实例,并执行OurStrategy抽象基类的方法Play。
接下来,实现OurDecorator这个充当装饰器的类。
public class AttackStategy : OurDecorator { public AttackStategy(OurStrategy ourStrategy) : base(ourStrategy) { } public override void Play(string msg) { base.Play(msg); Console.WriteLine("下半场3-1-3-1进攻阵型"); } }
以上,当然还可以写出很多OurDecorator的派生类。
客户端这样调用:
class Program { static void Main(string[] args) { OurDecorator ourDecorator = new AttackStategy(new OurDefaultStategy()); ourDecorator.Play("haha"); Console.ReadKey(); } }
以上,
通过new AttackStategy(new OurDefaultStategy())把new OurDefaultStategy()实例赋值给类充当装饰墙的抽象基类OurDecorator的_ourStrategy字段。
当执行ourDecorator.Play("haha")方法,首先来到AttackStategy的Play方法,执行base.Play(msg),这里的base就是AttackStategy的抽象父类OurDecorator,再执行OurDecorator的Play方法,由于已经给OurDecorator的_ourStrategy字段赋值,_ourStrategy字段存储的是OurDefaultStategy实例,所以,base.Play(msg)最终执行的是OurDefaultStategy的Play方法,即把"上半场4-1-2-1防守阵型"显示出来。
最后执行AttackStategy的Play方法中的Console.WriteLine("下半场3-1-3-1进攻阵型")部分,把"下半场3-1-3-1进攻阵型"显示出来。
关于“C#装饰器模式怎么实现”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C#装饰器模式怎么实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注创新互联行业资讯频道。