.net设计模式 (装饰器模式)

运用设计模式只是为了解决一类问题的,当解决掉当前一类问题,通常会在解决这个问题时候 带来其他问题  合理应用扬长避短


结构性设计模式:关注的是类与类之间的关系

                          .net设计模式 (装饰器模式)学习笔记  

概要:通常结构性的设计模式,使用组合代替 继承,而  装饰器模式  及使用组合又使用继承。

灵魂 :在于 装饰器 和 被装饰的 对象   使用同一个基类。对象的使用过程中 可以不断的 新增功能。   新增的功能的过程实际上是对 原有的对象 包裹了一层。

功能需求,我是王大锤 ,在程序运行过程中 添加 一些功能,比如 长者长头发,穿着外套,穿着鞋子,穿着红色内裤

    /// <summary>
    /// 适配器 和 使用适配器对象  的基类 
    /// </summary>
    public abstract class BaseCharacter
    {
        public abstract void Show();
    }


    //王大锤
    public class Hammer_Wang : BaseCharacter
    {
        public override void Show()
        {
            Console.WriteLine("我是王大锤!");
        }
    }


    /// <summary>
    /// 装饰器 的基类
    /// </summary>
    public class BaseDecorator : BaseCharacter
    {
        public BaseCharacter baseCharacter;

        public BaseDecorator(BaseCharacter character)
        {
            this.baseCharacter = character;
        }
        public override void Show()
        {
            this.baseCharacter.Show();
        }
    }





    

    /// <summary>
    /// 长头发 装饰器
    /// </summary>
    public class DecoratorHair : BaseDecorator
    {
        public DecoratorHair(BaseCharacter character) : base(character)
        {
            this.baseCharacter  = character;
        }

        public override void Show()
        {
            //base.Show();
            this.baseCharacter.Show();
            Console.WriteLine("我长着头发 。。");
        }
    }


    /// <summary>
    /// 我外套 装饰器
    /// </summary>
    public class DecoratorCoat : BaseDecorator
    {
        public DecoratorCoat(BaseCharacter character) : base(character)
        {
            this.baseCharacter = character;
        }

        public override void Show()
        {
            this.baseCharacter.Show();
            Console.WriteLine("我穿着外套 。。");
        }
    }




    /// <summary>
    /// 鞋子装饰器
    /// </summary>
    public class DecoratorShose : BaseDecorator
    {
        public DecoratorShose( BaseCharacter character ):base(character)
        {
            this.baseCharacter = character;
        }

        public override void Show()
        {
            this.baseCharacter.Show();
            Console.WriteLine("我穿着鞋子...");
        }
    }





    /// <summary>
    /// 红色类库 装饰器
    /// </summary>
    public class DecoratorRedUnderwear :BaseDecorator
    {
        public DecoratorRedUnderwear(BaseCharacter character) : base(character)
        {
            this.baseCharacter = character;
        }

        public override void Show()
        {
            this.baseCharacter.Show();
            Console.WriteLine("我还穿着红色内裤。。");
        }
    }
    






    class Program
    {
        static void Main(string[] args)
        {


            //开始使用
            BaseCharacter baseCharacter = new Hammer_Wang();


            baseCharacter = new DecoratorHair(baseCharacter);
            baseCharacter = new DecoratorCoat(baseCharacter);

            baseCharacter = new DecoratorShose(baseCharacter);
            baseCharacter = new DecoratorRedUnderwear(baseCharacter);

            baseCharacter.Show();

            Console.ReadKey();

        }
    }

猜你喜欢

转载自blog.csdn.net/nicepainkiller/article/details/83898486