.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();

        }
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nicepainkiller

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值