zoukankan      html  css  js  c++  java
  • 设计模式之笔记--装饰模式(Decorator)

    装饰模式(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);
            }
        }
  • 相关阅读:
    sqlconnection 调用webservice服务
    WebService注解
    发布WebService 1.1
    soap 1.1 访问服务
    WebService一些概念
    8-7 Flutter通信机制&Dart端讲解
    8-4 Flutter Android混合开发实战-调试与发布
    8-3 Flutter Android混合开发实战-集成与调用
    8-2 Flutter混合开发流程与创建Flutter module
    7-5 高级功能列表下拉刷新与上拉加载更多功能实现
  • 原文地址:https://www.cnblogs.com/zhou-yi/p/5383728.html
Copyright © 2011-2022 走看看