装饰模式(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);}}

转载于:https://www.cnblogs.com/zhou-yi/p/5383728.html

设计模式之笔记--装饰模式(Decorator)相关推荐

  1. 设计模式学习笔记——装饰(Decorator)模式

    设计模式学习笔记--装饰(Decorator)模式 @(设计模式)[设计模式, 装饰模式, decorator] 设计模式学习笔记装饰Decorator模式 基本介绍 装饰案例 类图 实现代码 Dis ...

  2. 读《研磨设计模式》-代码笔记-装饰模式-Decorator

    [b]声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客[url]http://chjavach.iteye.com/[/url][/b] import java.io.B ...

  3. 设计模式系列之装饰模式(Decorator Pattern)

    装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装.这种模式创建了一个装饰类,用来包装原 ...

  4. 设计模式之略见一斑(装饰模式decorator)

    标头:(引自设计模式) 为了扩展代码库,通常给它添加新类或者新方法.有时候,你也许不希望在运行时候使用新行为来组合对象.Interpreter模式允许你组合可执行对象,这个对象的行为可能变化会非常快. ...

  5. 《研磨设计模式》chap22 装饰模式Decorator(4)AOP+总结

    1. AOP面向方面编程 共性功能 AOP调用示意图 public class SaleModel { private String goods; //销售的商品 public String getG ...

  6. 《研磨设计模式》chap22 装饰模式Decorator(1)模式简介

    场景:算员工奖金,各种奖金,有个人销售奖,团队奖,环比增加销售奖等等 1. 正常编码 public class Prize {//计算某人在某段时间内的奖金,有些参数在演示中并不会使用, public ...

  7. 设计模式之9 - 装饰模式Decorator

    我们经常会遇到这种问题,当一个类出现非常多的选择,比如 咖啡,要加 糖.抹茶.香草.牛奶--,那么多调味品,在这种情况下,考虑通过继承的方式是否合理?你会得到 很多种咖啡类,牛奶咖啡.抹茶咖啡.牛奶椰 ...

  8. 《研磨设计模式》chap22 装饰模式Decorator(2)应用到场景

    //计算奖金的组件接口 public abstract class Component { public abstract double calcPrize(String user,Date begi ...

  9. [设计模式-结构型]装饰模式(Decorator)

    概括 名称 Decorator 结构 动机 动态地给一个对象添加一些额外的职责.就增加功能来说,D e c o r a t o r 模式相比生成子类更为灵活. 适用性 在不影响其他对象的情况下,以动态 ...

最新文章

  1. 将时间改为显示:几天前,几小时前,或者几分钟前
  2. Python学习小结---粗略列表解析
  3. Java Web中的Filter和Interceptor的区别
  4. 线上报名 | 高性能深度学习推理引擎 TensorRT 实战编程讲解
  5. GDCM:VRDS的测试程序
  6. Apache Flink 零基础入门(十九)Flink windows和Time操作
  7. java反射 获取方法参数名_java 反射借助 asm 获取参数名称最优雅简单的方式
  8. 【OpenCV 例程200篇】20. 图像的按位运算
  9. [洛谷 P3992] [BJOI2017]开车
  10. 虚幻四如何实现第一人称_虚幻周报20200616 | 开分群啦~
  11. 函数数列极限求法总结
  12. PLINK-GWAS学习9------对于二元数据的关联分析
  13. 使用MASM 5编译程序的便利批处理
  14. js 百度地图和高德地图经纬度相互转换
  15. 常见BSOD蓝屏原因分析
  16. java中求梯形的面积_java 求梯形面积
  17. VS2019:添加现有项目 / 现有cpp文件
  18. 练习打字速度效果很好的网站(本人亲测)
  19. ios设置App版本号
  20. 删除数组中的重复项(保留最后一次出现的重复元素并保证数组的原有顺序)

热门文章

  1. 迭代法移动盘子java,算法学习--日记(牛顿迭代法)
  2. 区块链技术未来可能用于哪些方面?
  3. 我是如何在尼日利亚的沃里创立Google Developers Group GDG分会的,并达到了100位成员...
  4. javascript 堆栈_JavaScript调用堆栈-它是什么以及为什么它是必需的
  5. 最新Java面试题答案
  6. gitee查看当前账号_upic+gitee图床,自由书写Markdown
  7. 参加java培训,要避免这几个误区!
  8. 存储能否导致ESXi网络性能问题?
  9. 【转载】mysql常用函数汇总
  10. iOS开发几年了,你清楚OC中的这些东西么!!!?