装饰器模式允许向现有对象中添加新功能,同时又不改变其结构。

介绍

装饰器模式属于结构型模式,主要功能是能够动态地为一个对象添加额外功能。在保证现有功能的基础上,再添加新功能,可联想到 WPF 中的附件属性。

类图描述

由上图可知,我们定义了一个基础接口 IShape 用于约定对象的基础行为。然后通过定义ShapeDecorator 类 来扩展功能,RedShapleDecorator 为具体的扩展实现。

代码实现

1、定义接口

public interface IShape
{void Draw();
}

2、定义对象类型

public class Circle:IShape
{public void Draw(){Console.WriteLine("Shape:Circle");}
}public class Rectangle : IShape
{public void Draw(){Console.WriteLine("Shape:Rectangle");}
}

3、定义新的扩展装饰类

public class ShapeDecorator:IShape
{protected IShape decoratedShape;public ShapeDecorator(IShape decoratedShape){this.decoratedShape = decoratedShape;}public virtual void Draw(){decoratedShape.Draw();}
}

4、定义扩展类的具体实现

public class RedShapleDecorator : ShapeDecorator
{public RedShapleDecorator(IShape decoratedShape) : base(decoratedShape){}public override void Draw(){this.decoratedShape.Draw();setRedBorder(this.decoratedShape);}private void setRedBorder(IShape decoratedShape){Console.WriteLine("Border Color:Red");}
}

5、上层调用

class Program
{static void Main(string[] args){IShape circle = new Circle();IShape redCircle = new RedShapleDecorator(new Circle());IShape redRectangle = new RedShapleDecorator(new Rectangle());Console.WriteLine("Circle with normal border");circle.Draw();Console.WriteLine("Circle of red border");redCircle.Draw();Console.WriteLine("Rectangel of red border");redRectangle.Draw();Console.ReadKey();}
}

总结

装饰器模式使得对象的核心功能和扩展功能能够各自独立扩展互不影响。但是对于装饰功能较多的情况下不建议采用这种模式。

转载于:https://www.cnblogs.com/hippieZhou/p/9979019.html

设计模式系列 - 装饰器模式相关推荐

  1. 设计模式学习----装饰器模式

    这两天本来是自在学习java collection Framework的Fail Fast底层机制,看到核心的部分时,突然意识到设计模式的问题,上大学到现在我还没有真正理解过设计模式的概念,于是用了大 ...

  2. 【设计模式】装饰器模式的使用

    问题来源 我们在进行软件系统设计的时候,有一些业务(如下图,一些通用的非功能性需求)是多个模块都需要的,是跨越模块的.把它们放到什么地方呢? 最简单的办法就是把这些通用模块的接口写好,让程序员在实现业 ...

  3. go设计模式之装饰器模式

    go设计模式之装饰器模式 再写这篇文章时,我已经看了很多其他人发表的类似文章,大概看了这么多吧. 亓斌的设计模式-装饰者模式(Go语言描述) jeanphorn的Golang设计模式之装饰模式 七八月 ...

  4. python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern

    #写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...

  5. python 设计模式之装饰器模式 Decorator Pattern

    #写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...

  6. 零基础学习设计模式之装饰器模式(配套视频)

    零基础学习设计模式之装饰器模式 定义 在不改变目标结构的情况下,动态的给对象增加功能 举例 如房子装修.相片加相框等,都是装饰器模式. 基本组件 抽象构件(Component)角色:定义一个抽象接口以 ...

  7. 详解设计模式:装饰器模式

    装饰器模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),是 GoF 的 23 种设计模式中的一种结构型设计模式.装饰器模式 是指在不改变原有对象的基础之上,将 ...

  8. javascript设计模式之装饰器模式(结构型模式)

    javascript设计模式之装饰器模式 js的设计模式分为创建型模式,结构型模式和行为模式 结构模式描述了如何组合对象以提供新的功能. 装饰器模式是一种常见的结构型模式,我们可以以一个基础对象为基础 ...

  9. 设计模式之装饰器模式详解

    设计模式之装饰器模式详解 文章目录 设计模式之装饰器模式详解 一.什么是装饰器模式 二.装饰器模式的角色组成 三.装饰器模式通用写法示例 四.装饰器模式业务中的应用举例 五.装饰器模式优缺点 一.什么 ...

  10. PHP设计模式之装饰器模式

    工厂模式告一段落,我们来研究其他一些模式.不知道各位大佬有没有尝试过女装?据说女装大佬程序员很多哟.其实,今天的装饰器模式就和化妆这件事很像.相信如果有程序媛MM在的话,马上就能和你讲清楚这个设计模式 ...

最新文章

  1. LaTeX 简介与安装
  2. 题目1171:C翻转
  3. java future设计模式
  4. 主从mysql replication 集群的sharding memcache集群使用consistent hash
  5. hihoCoder #1872 : Pythagorean triple
  6. STM32关闭CAN外设的自动重传功能
  7. 华为云云原生数据库GaussDB加速创新,企业核心数据上云信赖之选
  8. 一些简单的前端练习demo
  9. 顺丰快递员私自截留口罩贩卖?官方回应来了:口罩微商搞的鬼!
  10. Git服务器Gitosis安装设置
  11. python后台架构Django教程——数据模型Model
  12. 系统分析师教程电子版免费下载
  13. Windows系统字体和系统应用字体
  14. win10自带抓包工具_[教程] 利用抓包工具从Windows 10 应用商店里下载应用程序离线安装包...
  15. python生成PDF报告
  16. 【转】selenium怎样定位web提示语
  17. 生产环境服务端报错:阿里云IOT连接中断
  18. 【OpenCV 例程200篇】20. 图像的按位运算(cv2.bitwise)
  19. 生日蛋糕(noi99)
  20. windows 自带计算器介绍

热门文章

  1. openwrt监控linux,openwrt linux portal 实现 支持 https 支持基于时长和流量控制
  2. Servlet教程第0~3讲笔记
  3. Crossing Road Simulation
  4. 配置的代理服务器未响应 电脑连不上网_手机、电脑为什么连不上网(断网)?...
  5. 使用 Python 进行双重退火优化
  6. python函数中的变量,使全局Python函数中的所有变量
  7. java -cp 什么意思 怎么用
  8. github API 实例 分页读取
  9. linux ubuntu apache php 网站 'page not found'
  10. Ubuntu16.04 安装Apache2和php后,无法访问phpinfo.php