设计模式中的装饰模式,最大的好处就是可以动态地给一个对象增加一些额外的职责,把类中的装饰功能移除简化原有类。这也体现了面向对象的核心开放-封闭原则。

装饰模式由4个角色构成:

(1)抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
  (2)具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。
  (3)装饰(Decorator)角色:持有一个构件(Component)对象的实例,并实现一个与抽象构件接口一致的接口。
  (4)具体装饰(Concrete Decorator)角色:负责给构件对象添加上附加的责任。

但在具体的实例过程中,有了具体构件或具体装饰也就没有必要再建立抽象构件或装饰了。

下面就以为电视剧里的”若曦“和”四爷“打造一身 冬装和夏装为例实现一下代码:

首先是Concrete Component:Person类

class Person{public Person(){ }private string name;public Person(string name){this.name = name;}public virtual void Show(){Console.WriteLine("装扮的{0}", name);}}

然后是Decorator:Finery类

class Finary : Person{protected Person component;//打扮public void Decorate(Person component){this.component = component;}public override void Show(){if (component != null){component.Show();}}}

ConcreteDecorator:具体的Finery类

 class TShirts : Finary{public override void Show(){Console.WriteLine("T恤");base.Show();}}class Shorts : Finary{public override void Show(){Console.WriteLine("短裤");base.Show();}}class Snadal : Finary{public override void Show(){Console.WriteLine("凉鞋");base.Show();}}class CottonShoes : Finary{public override void Show(){Console.WriteLine("棉鞋");base.Show();}}class Jeans : Finary{public override void Show(){Console.WriteLine("牛仔裤");base.Show();}}class Scarf : Finary{public override void Show(){Console.WriteLine("围巾");base.Show();}}class DownJacks : Finary{public override void Show(){Console.WriteLine("羽绒服");base.Show();}}

最后是客户端的代码:

class Program{static void Main(string[] args){// 夏天的装扮Person sy = new Person("四爷");Console.WriteLine("夏天装扮的“四爷”:");                  Snadal lx = new Snadal ();Shorts dk = new Shorts();TShirts tx = new TShirts();//装饰过程lx.Decorate(sy);dk.Decorate(lx);tx.Decorate(dk);tx.Show();//冬天的装扮Person rx = new Person("若曦");Console.WriteLine("\n\n冬天装扮的“若曦”:");CottonShoes  mx = new CottonShoes ();Jeans nj = new Jeans ();DownJacks yrf = new DownJacks();Scarf wj = new Scarf();//装饰过程mx.Decorate(rx);nj.Decorate(mx);yrf.Decorate(nj);wj.Decorate(yrf);wj.Show();Console.Read ();}}

结果显示为:

这样就用装饰模式就为“四爷”和“若曦”穿越回现在的样子打扮好了,只是穿的是不是有点太接地气了呢?想要为他们打造华丽的服饰还是自己试试吧!

装饰模式--私人定制冬装夏装相关推荐

  1. 蓝牙激光雕刻机android,迷你型激光雕刻机!私人定制随你玩

    原标题:迷你型激光雕刻机!私人定制随你玩 激光刻字已经成为了很多品牌商出售自己商品的时候附带的一项免费服务.比如之前大家还嚷嚷着贵啊贵的Apple Pencil,就因为能够刻字这项服务,导致很多人忍不 ...

  2. android 定制输入法,QQ输入法Android 4.3全新升级 实现私人定制输入

    新一版QQ手机输入法来了, 针对Android平台每一个用户深度定制输入法.最新4.3版本除了对核心功能进行优化外,更带来了诸多新增功能:新增键盘大小调节,私人定制; 自定义皮肤可自选字体颜色,深度个 ...

  3. 揭个人信息黑产链条:含50多种交易大项 可私人定制

    自从"天天"出事之后,许多数据信息买卖的QQ群沉寂下来,一些生意甚至陷入了瘫痪状态. "天天"是圈内有名的"大人物",这个"圈子& ...

  4. 案例分享|智慧广电的“宽带加速”之路,博睿数据来“私人定制”

    几乎所有行业都在向智慧型方向进发,对于广电行业而言,也并不例外. 2020年3月2日,国家广播电视总局召开电视电话会议,贯彻落实中宣部等九部委联合印发的<全国有线电视网络整合发展实施方案> ...

  5. 敏涵控股集团贵族私人定制:时尚最C位 懂精致 更懂生活

    谈及欧式,你最向往的是什么?是优雅,是简约,是塞纳河畔的咖啡,还是法国国宝级的演员苏菲玛索?在欧式的时尚字典里,你就是你自己,你拥有风情,拥有浪漫,拥有专属于自己的时尚. 我们都希望避开拥挤的人流,在 ...

  6. 敏涵控股集团贵族私人定制:一场探索美学的旅程

    有人说, 享受敏涵贵族私人定制 就像一场探索服装美学的旅程 高质量的工艺技术 贴合人体的版型 丰富的面料样册 经典与流行的设计款式等等 这一切都在展商身上得到了充分展示 除了这些我们还能探究什么? 光 ...

  7. 私人定制情人节告白网站并且部署上线,谁说程序员没有爱!超详细步骤!源码分享!

    私人定制情人节告白网站并且部署上线,谁说程序员没有爱! 文章目录 私人定制情人节告白网站并且部署上线,谁说程序员没有爱! 前言 项目地址: 方法1:部署到自己的ecs服务器 白嫖一个ecs服务器 方法 ...

  8. 尚驰SHANGCHI洗车店兰州汽车美容店私人定制洗车服务 杜绝难看的洗车纹!

    私人定制洗车服务 杜绝难看的洗车纹 (拟定) 定制服务是针对有特殊需求的顾客,对自己的爱车爱护有加的一类人群,和高端车辆和新车用户. 顾客可以一次性购买此类商品,并对东西可以保存到我店,专人专用享有尊 ...

  9. 私人定制YX3系列高效节能电动机:这才是大腕儿!

    私人定制YX3系列高效节能电动机:这才是大腕儿! YX3系列高效节能电动机是国家重点推广的高效节能电机产品,电机的效率指标达到GB18613<中小型电动机能效限定值及能效等级>2级能效标准 ...

最新文章

  1. CentOS 7安装GitLab、汉化、配置邮件发送
  2. 使用手机测试、访问本地环境方法
  3. linux小知识之终端
  4. spring-boot (三) spring data jpa
  5. python image 转成字节_就是这么牛!三行Python代码,让数据处理速度提高2到6倍
  6. emacs c语言,如何利用Emacs来调试C++程序
  7. linux下mtr命令,如何使用Linux mtr命令
  8. 人类心理学中几乎没有人知道的东西是什么?
  9. poi 读取excel
  10. 5G的To C 应用还是没有和消费者强关联
  11. 使用PL/SQL Developer 远程连接Oracle数据库出现 “无监听程序“错误 的解决办法
  12. CSND自定义模块管理
  13. 学校计算机房网络的拓扑结构一般采用,XX学校机房建设规划方案
  14. 禾匠二开系列之兑换码禁用以后启用功能
  15. MySQL基础——DDL、DML、DQL、DCL语句
  16. 写在2022的小尾巴
  17. 一款功能强大的开源excel在线表格
  18. string.Equals和tring.Compare比较字符串(并且忽略大小写)
  19. Android9.0 完全隐藏导航栏、状态栏
  20. Python 二维数据

热门文章

  1. PYTHON使用chinese_calendar判断日期是否为节假日
  2. ATM和电路交换和分组交换区别
  3. Unity之使物体透明化和还原
  4. 模具设计分型的10大原则
  5. WordPress 配置七牛云 CDN 具体操作
  6. Coredump:core与kernel的区别,以及coredump具体指什么?
  7. 计算x的n次方 高效算法
  8. NPDP产品经理小知识:端到端的流程建设与跨职能团队管理
  9. a标签在IE浏览器进行download下载,出现中文乱码 - 戴向天
  10. HTML--图片的插入