装饰者模式 The Decorator Pattern

       装饰者模式——动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。(摘自《Head First Design Patterns》)
        以下是自已用VS画了一个简图:       
       本文意要创建一把剑,给它装饰不同的属性来增加不同的效果,以达到装饰者模式的思想。
       首先,创建武器抽象基类
public abstract class Weapon

    {

        private string Appearance;



        private int Aggressivity;



        public abstract string GetAppearance();

        public abstract int GetAggressivity();



        public void Show()

        {

            Console.WriteLine(GetAppearance() + "  攻击力:" + GetAggressivity().ToString());

       }
       show方法意在输出测试结果。        下面创建装饰者的基类:       
public abstract class Decorator : Weapon

    {



        public Weapon Weapon;

    }
       很简单的一个抽象类,当然可以自由扩充一些方法等,但在此只是为了以最简单的方式表达装饰者模林思想。
       实现三个装饰者,目的是给剑附上冰,火,风等属性:
      
public class GlacialDecorator : Decorator

    {

        public GlacialDecorator(Weapon w)

        {

            base.Weapon = w;

        }



        public override string GetAppearance()

        {

            return base.Weapon.GetAppearance() + " 附冰属性";

        }



        public override int GetAggressivity()

        {

            return base.Weapon.GetAggressivity() + 50;

        }

    }



public class FireDecorator : Decorator

    {

        public FireDecorator(Weapon w)

        {

            base.Weapon = w;

        }



        public override string GetAppearance()

        {

            return base.Weapon.GetAppearance() + " 附火属性";

        }



        public override int GetAggressivity()

        {

            return base.Weapon.GetAggressivity() + 70;

        }

    }



public class WindDecorator : Decorator

    {

        public WindDecorator(Weapon w)

        {

            base.Weapon = w;

        }



        public override string GetAppearance()

        {

            return base.Weapon.GetAppearance() + " 附风属性属性(攻击速度加20%)";

        }



        public override int GetAggressivity()

        {

            return base.Weapon.GetAggressivity();

        }

    }
       最后,开始创建一把普通的剑了:
             
public class Sword : Weapon

    {

        public override string GetAppearance()

        {

            return "这是一把剑";

        }



        public override int GetAggressivity()

        {

            return 10;

        }

    }
       接下来试着给普通的剑附魔:
      
Weapon sword = new Sword();

            sword.Show();

            //装饰一个冰属性

            sword = new GlacialDecorator(sword);

            sword.Show();

            //装饰一个火属性

            sword = new FireDecorator(sword);

            sword.Show();

            //装饰一个风属性

            sword = new WindDecorator(sword);

            sword.Show();

输出结果:
这是一把剑 攻击力:10
这是一把剑 附冰属性 攻击力:60
这是一把剑 附冰属性 附火属性 攻击力:130
这是一把剑 附冰属性 附火属性 附风属性属性(攻击速度加20%) 攻击力:130
 
       到此为止,装饰者模式的思想介绍完毕,当给这把普通的剑装饰上各种不同的属性时,这把普通的剑也变的不再普通,攻击力也不断上涨,还带有攻击属性,呵呵。我们还可以创建一把斧头,然后用这些装饰者装饰产生不同的效果。
       欢迎大家给一些意见。
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值