前言:装饰者模式,又叫做装饰器模式.顾名思义,就是给对象包裹一层,包装。让它变成你喜欢的对象。这种模式在我们开发中经常会用到,它是一种处理问题的技巧,即不让程序死板,也可以扩展程序。

(一)何时能用到它》》》

  1.需要给类一个扩展,或者给类附加一个职责。

  2.动态的给类添加一个功能,这些功能可以动态得撤销。

  3.当不能采用子类进行扩展的时候。

这一文中,我们以主要的3来举例说明的。

(二)装饰器的结构图》》》

IAction:装饰器标准接口,装有装饰器都要实现它。

DelegateAction:装饰类,用来实现IAction插口的功能,并对外部提供另一种表现形式。

StandardAction:标准实现类,用来实现IAction插口的功能,对其展示也是以IAction接口为准的

Implement:对外公开的调用类,它向外部公开两种接口方法,一是IAction接口标准,一是Action<int> 委托标准。

装饰器的C#实现

IAction.cs

#region 装饰着模式
public interface IAction
{
void Pring(int a);
}
#endregion

DelegateAction.cs

public class DelegateAction:IAction
{
Action<int> _action;
public void Pring(int a)
{
_action(a);
}
public DelegateAction(Action<int> action)
{
_action = action;
}
}

Implement.cs

 public class Implement
{
public void Run(IAction action)
{
action.Pring();
}
public void Run(Action<int> action)
{
new DelegateAction(action).Pring();
}
}

standarAction.cs

public class standarAction : IAction
{
public void Pring(int a)
{
Console.Write("标准实现装饰器"+a);
}
}

调用:

 static void Main(string[] args)
{
Implement implement = new Implement();
implement.Run((a) => Console.Write(a));
implement.Run(new standarAction());
}

可见扩展方法能使得装饰行为变得非常简洁,看起来就像是这个对象本身就有新方法似的。还避免了程序出现多种装饰对象,简化程序。

今天俺要说一说装饰着模式(Decorator)的更多相关文章

  1. 浅谈设计模式--装饰者模式(Decorator Pattern)

    挖了设计模式这个坑,得继续填上.继续设计模式之路.这次讨论的模式,是 装饰者模式(Decorator Pattern) 装饰者模式,有时也叫包装者(Wrapper),主要用于静态或动态地为一个特定的对 ...

  2. 【PHP设计模式 09_ZhuangShiQi.php】装饰器模式 (decorator)

    <?php /** * [装饰器模式 (decorator)] * 有时候发布一篇文章需要经过很多人手,层层处理 */ header("Content-type: text/html; ...

  3. 设计模式(八)装饰器模式Decorator(结构型)

    设计模式(八)装饰器模式Decorator(结构型) 1. 概述 若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性.如果已经存在的一个类缺少某些方法 ...

  4. 设计模式 - 装饰者模式(Decorator Pattern) Java的IO类 用法

    装饰者模式(Decorator Pattern) Java的IO类 用法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26716 ...

  5. 设计模式 - 装饰者模式(Decorator Pattern) 具体解释

    装饰者模式(Decorator Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26707033 装饰者 ...

  6. 装饰器模式-Decorator(Java实现)

    装饰器模式-Decorator(Java实现) 装饰器模式允许向一个现有的对象添加新的功能, 同时又不改变其结构. 其中 "现有对象"在本文中是StringDisplay类. 添加 ...

  7. 装饰者模式 Decorator

    项目:咖啡计费系统 背景:现有系统中有一个抽象类Beverage,有2个抽象方法GetDescription和Cost. namespace DecoratorPattern { /// <su ...

  8. 设计模式学习--装饰者模式(Decorator Pattern)

    概念: 装饰者模式(Decorator Pattern): 动态地将功能添加到对象,相比生成子类更灵活,更富有弹性. 解决方案: 装饰者模式的重点是对象的类型,装饰者对象必须有着相同的接口,也也就是有 ...

  9. 大话设计模式--装饰者模式 Decorator -- C++实现实例

    1.装饰者模式 Decorator 动态地给一个对象添加一个额外的职责, 就添加功能来说, 装饰模式比生成子类更为灵活. 每个装饰对象的实现和如何使用这个对象分离,  每个装饰对象只关心自己的功能,不 ...

随机推荐

  1. js_base_note

  2. UOJ#374. 【ZJOI2018】历史 贪心,LCT

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ374.html 题解 想出正解有点小激动. 不过因为傻逼错误调到自闭.不如贺题 首先我们考虑如何 $O(n ...

  3. 服务器、IP地址和域名之间有什么关系?

    一.服务器 服务器其实就像我们的家用电脑一样,也有主板.CPU.内存.硬盘.电源等,但是由于它们处理问题的不同,服务器更像一台加强的家用电脑,服务器是为展网络业务而存放.处理数据的,所以服务器一般是存 ...

  4. Linux学习之文件系统权限及表示

    三类人 用户主(user:u):文件的所有者 同组人(group:g):与文件主同组的用户 其他人(other:o):除用户主和同组人外的其他所有人 三种权限 读权限(r):指用户对文件或目录的读许可 ...

  5. CoreException: Could not get the value for parameter compilerId for plugin execution default-compile: PluginResolutionException: Plugin org.apache.maven.plugins:maven-compiler-plugin:3.1

    今天遇到一个奇怪的问题, 之前写好的代码, 更换环境后, 重新搭建的nexus, maven私服总是报错, 各种clean/update都不管用 原来是没写版本号, 后来加上3.1版本, 还是报错, ...

  6. using Sysyem.Net.Http命名空间引用不了的解决方案

    1.查看.Net Framework的框架是否是在4.5之上,如果不是要下载4.5之上的目标框架. 2.在引用器里面添加using System.Net.Http命名空间 选择项目列表中的“引用”-- ...

  7. JdbcTemplate实体映射

    JdbcTemplate实体映射 如果你需要使用JdbcTemplate将查询的数据映射成Java POJO,那么这篇文章适合你. 一个例子入门 下面是一个将表中一行记录映射成Map的例子,也是Jdb ...

  8. webpack配置非CMD规范的模块

    一.前言 webpack在配置多页面开发的时候 ,发现用 import 导入 Zepto 时,会报 Uncaught TypeError: Cannot read property 'createEl ...

  9. Google 浏览器好用插件推荐

    Adblock Plus, 免费广告拦截器 Adobe Acrobat  将当前网页转换为 Adobe PDF 文件 Axure RP Extension for Chrome  不仅能绘制出详细的产 ...

  10. f12 headers 变字典快捷方式