装饰模式(Decorator Pattern):

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

模式角色与结构:

示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace CSharp.DesignPattern.DecoratorPattern
{class Program{static void Main(string[] args){Component component;Component componentDecorator;component = new Window();componentDecorator = new ScrollBarDecorator(component);componentDecorator.display();component = new TextBox();componentDecorator = new BlackBorderDecorator(component);componentDecorator.display();Console.ReadLine();}}// 抽象构件abstract class Component{public abstract void display();}// 具体构件class Window : Component{public override void display(){Console.WriteLine("Window...");}}class TextBox : Component{public override void display(){Console.WriteLine("TextBox...");}}// 抽象装饰类class ComponentDecorator : Component{private Component component; // 维持对抽象构件类型对象的引用public ComponentDecorator(Component component) // 注入抽象构件类型的对象
        {this.component = component;}public override void display(){component.display();}}// 具体装饰类class ScrollBarDecorator : ComponentDecorator{public ScrollBarDecorator(Component component) : base(component){   }public override void display(){this.SetScrollBar();base.display();}public void SetScrollBar(){Console.WriteLine("Add Scroll Bar...");}}class BlackBorderDecorator : ComponentDecorator{public BlackBorderDecorator(Component component): base(component){ }public override void display(){this.SetBlackBorder();base.display();}public void SetBlackBorder(){Console.WriteLine("Add Black Border...");}}
}

转载于:https://www.cnblogs.com/thlzhf/p/3993371.html

CSharp设计模式读书笔记(10):装饰模式(学习难度:★★★☆☆,使用频率:★★★☆☆)...相关推荐

  1. CSharp设计模式读书笔记(22):策略模式(学习难度:★☆☆☆☆,使用频率:★★★★☆)...

    策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy). 模式角色与结构: ...

  2. CSharp设计模式读书笔记(18):中介者模式(学习难度:★★★☆☆,使用频率:★★☆☆☆)...

    中介者模式(Mediator Pattern):用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互,中介者模式又称为 ...

  3. CSharp设计模式读书笔记(3):抽象工厂模式(学习难度:★★★★☆,使用频率:★★★★★)...

    抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类.抽象工厂模式又称为Kit模式. 模式角色和结构图: 抽象工厂是指一 ...

  4. Head First设计模式读书笔记三 装饰模式(个人理解:包装模式)

    本文示例代码材料源自Head First设计模式 以前整理自己整理的装饰模式的链接:https://blog.csdn.net/u011109881/article/details/58719049 ...

  5. 大数据之路读书笔记-10维度设计

    大数据之路读书笔记-10维度设计 文章目录 大数据之路读书笔记-10维度设计 10.1 维度设计基础 10.1.1 维度的基本概念 10.1.2 维度的基本设计方法 10.1.3 维度的层次结构 10 ...

  6. 大话设计模式读书笔记

    主题 概要 设计模式 大话设计模式读书笔记 编辑 时间 新建 20170423 序号 参考资料 1 大话设计模式 重新看了一遍设计模式,除了一些已经特别熟悉的模式,都自己敲了一遍代码,有些豁然开朗的感 ...

  7. 《Java8实战》读书笔记10:组合式异步编程 CompletableFuture

    <Java8实战>读书笔记10:组合式异步编程 CompletableFuture 第11章 CompletableFuture:组合式异步编程 11.1 Future 接口 (只是个引子 ...

  8. Think in Java第四版 读书笔记10 第16章 数组

    Think in Java第四版 读书笔记10 第16章 数组 数组和容器很像 但他们有一些差别 16.1 数组为什么特殊 数组与容器的区别主要在效率和存储类型 效率:数组是简单的线性序列 使得数组的 ...

  9. JavaScript设计模式读书笔记(一)= 创建型设计模式

    全系列目录 JavaScript设计模式读书笔记(一)=> 创建型设计模式 JavaScript设计模式读书笔记(二)=> 结构型设计模式 JavaScript设计模式读书笔记(三)=&g ...

最新文章

  1. cnn stride and padding_Tensorflow学习笔记- 模型建立与训练篇(CNN)
  2. automaticallyAdjustsScrollViewInsets的作用
  3. php为什么在变量前加,php中变量前加、@等符号是什么意思?
  4. 牛客 共鸣问题(思维难题)
  5. python requests form data_python使用requests发送multipart/form-data请求数据
  6. git在远程关联和push时出现问题
  7. 陈松松:知道这5个视频营销流量入口,你不缺流量
  8. Android世界第一个activity启动过程
  9. indesign缩放图片被切割_InDesign怎么改变图片的大小
  10. 【正点原子STM32连载】第十章 STM32CubeMX简介 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
  11. 14. Floyd + 朴素版Dijkstra
  12. Python 识别图片文字( Tesseract 安装使用 )
  13. win10user文件夹迁移_Win10纯净版下迁移用户文件的技巧
  14. X86、X64和X86_64区别
  15. 2021年最值得推荐的29个开源软件,想提升自己的程序员赶快收藏
  16. 不能启动的问题 社区版安装后_Windows To Go安装使用手记
  17. Linux I/O重定向 dup dup2 系统调用
  18. 几组数据的相关性python_几的定义
  19. 实现n*n乘法口诀表
  20. 计算机如何默认一种打字法,怎么把电脑的输入法设置成默认的

热门文章

  1. C# 使用XML序列化对象(一)
  2. iis 404错误从定向完美方案
  3. 利用Asp.net中的AJAX制作网页上自动选取开始日期及结束日期的用户自定义控件...
  4. 配置FTP服务2(vsftpd 配置虚拟账号)
  5. animate 实现滑动切换效果
  6. 即时聊天IM之一 XMPP协议简述
  7. Linux信号实践(3) --信号内核表示
  8. iOS开发UI篇—直接使用UITableView Controller
  9. AMD and CMD are dead之KMD.js依赖可视化工具发布
  10. CSV格式数据如何导入MySQL?