日期:2008-03-22 浏览次数:20460 次
本系列文章将向大家引见一下C#的设计模式,此为第十三篇文章,置信对大家会有所协助的。废话不多说,继续来看。
意图
动态地给一个对象添加一些额外的职责。就添加功用来说,Decorator模式相比生成子类更为灵活。
场景
在设计网络游戏的武器系统时,开始并没有考虑到武器的强化和磨损。之后,策划人员说希望给游戏添加强化系统和修缮系统,那么我们的武器类型就需求对外提供强化、磨损、修缮等方法了。发生这种改动是我们最不情愿看到的,按照设计准绳,我们希望功用的扩展尽可能不要修正原来的程序。你可能会想到使用承继来实现,但是策划人员的需求是有的武器能磨损能修缮,不能强化,有的武器能强化,但是不会磨损,有的武器既能强化还能磨损和修缮。遇到这样的情况,承继的方案可能不适合了,一来承继的层次可能会很多,二来子类的数量可能会很多。
由此,引入装饰模式来处理这个问题。装饰模式使得我们能灵活赋予类额外的职责,并且使得设计和承继相比更合理。
示例代码
using System; using System.Collections.Generic; using System.Text; namespace DecoratorExample { class Program { static void Main(string[] args) { Weapon w = new Rifle(); w.ShowInfo(); Enhance enhancedWeapon = new Enhance(w); enhancedWeapon.EnhanceAmmo(); enhancedWeapon.ShowInfo(); Wear wornWeapon = new Wear(w); wornWeapon.WearByRate(0.8); wornWeapon.ShowInfo(); } } abstract class Weapon { private double ammo; public double Ammo { get { return ammo; } set { ammo = value; } } private double attack; public double Attack { get { return attack; } set { attack = value; } } private double speed; public double Speed { get { return speed; } set { speed = value; } } private string name; public string Name { get { return name; } set { name = value; } } public abstract void ShowInfo(); } class Rifle : Weapon { public Rifle() { this.Ammo = 100; this.Attack = 10; this.Speed = 5; this.Name = "Rifle"; } public override void ShowInfo() { Console.WriteLine(string.Format("ammo\t{0}", Ammo)); Console.WriteLine(string.Format("attack\t{0}", Attack)); Console.WriteLine(string.Format("speed\t{0}", Speed)); Console.WriteLine(string.Format("name\t{0}", Name)); } } abstract class Decorator : Weapon { protected Weapon w; public Decorator(Weapon w) { this.w = w; } public override void ShowInfo() { w.ShowInfo(); } } class Enhance : Decorator { public Enhance(Weapon w) : base(w) { } public void EnhanceAmmo() { w.Ammo += 20; Console.WriteLine(">>>>>>>>>>>>Enhanced"); } } class Wear : Decorator { public Wear(
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|