首页 > 其他 > 详细

设计模式之笔记--装饰模式(Decorator)

时间:2016-04-12 19:07:22      阅读:297      评论:0      收藏:0      [点我收藏+]

装饰模式(Decorator)

定义

      装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

类图

技术分享

描述

Component:被装饰者和装饰者共有的基类;

ConcreteComponent:被装饰者的具体类;

Decorator:装饰类,包含一个Component实例;

ConcreteDecorator:具体的装饰类,其构造函数里有一个Component实例,方法可以扩展。

应用场景

      下面条的时候,可以在面条里放入西红柿、鸡蛋等食材,如果只在面条里放入西红柿,就是西红柿面条;如果只在面条里放入鸡蛋,就是鸡蛋面条;如果在面条里放入西红柿和鸡蛋,就是西红柿鸡蛋面条。面条可以看作被装饰者,西红柿、鸡蛋则可以被看作装饰者。

技术分享

    /// <summary>
    /// 食物
    /// </summary>
    public abstract class Food
    {
        private string name;
        /// <summary>
        /// 食物的名称
        /// </summary>
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public abstract void Cook();
    }

    /// <summary>
    /// 面条
    /// </summary>
    public class Noodles : Food
    {
        public Noodles()
        {
            this.Name = "面条";
        }

        public override void Cook()
        {
            Console.WriteLine(this.Name);
        }
    }

    /// <summary>
    /// 食材
    /// </summary>
    public abstract class Ingredients : Food
    {
        protected Food food;

        public Ingredients(Food food)
        {
            this.food = food;
        }
    }

    /// <summary>
    /// 西红柿
    /// </summary>
    public class Tomato : Ingredients
    {
        public Tomato(Food food)
            : base(food)
        {
            this.Name = "西红柿" + this.food.Name;
        }

        public override void Cook()
        {
            Console.WriteLine(this.Name);
        }
    }

    /// <summary>
    /// 鸡蛋
    /// </summary>
    public class Egg : Ingredients
    {
        public Egg(Food food)
            : base(food)
        {
            this.Name = "鸡蛋" + this.food.Name;
        }

        public override void Cook()
        {
            Console.WriteLine(this.Name);
        }
    }

 

设计模式之笔记--装饰模式(Decorator)

原文:http://www.cnblogs.com/zhou-yi/p/5383728.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!