.NET 设计模式—装饰器模式(Decorator Pattern)

这篇具有很好参考价值的文章主要介绍了.NET 设计模式—装饰器模式(Decorator Pattern)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许你在不改变对象接口的前提下,动态地将新行为附加到对象上。这种模式是通过创建一个包装(或装饰)对象,将要被装饰的对象包裹起来,从而实现对原有对象功能的增强和扩展。

角色

  • Component(组件): 定义了一个抽象接口,可以是抽象类或接口,规定了被装饰对象和装饰器的共同接口。
  • ConcreteComponent(具体组件): 实现了组件接口的具体类,是被装饰的对象。
  • Decorator(装饰器): 也是组件接口的子类,它持有一个指向具体组件对象的引用,并可以附加新的行为。
  • ConcreteDecorator(具体装饰器): 实现了装饰器接口的具体类,负责为具体组件对象添加新的行为。

优点

  • 装饰器模式可以在不改变现有代码的情况下,动态地扩展一个对象的功能。
  • 可以使用多个装饰器来组合成一个对象,可以灵活地增强对象的功能。
  • 装饰器模式遵循开闭原则,可以通过新增装饰器来扩展功能,而无需修改已有代码。

缺点

  • 过度的使用装饰器模式会导致程序中出现大量的小类,可能会使程序结构变得复杂。
  • 如果过度地使用继承来实现装饰器模式,可能会导致设计失去灵活性和可复用性。

应用场景

  • 动态扩展功能: 当你需要在不修改现有对象的代码的情况下,动态地向对象添加新功能或行为时,装饰者模式是一种非常有用的设计模式。
  • 避免类爆炸: 当有多个可能的组合方式时,避免创建大量子类的类层次结构,而使用装饰者模式可以更灵活地组合不同的功能,避免类爆炸问题。
  • 组合优于继承: 装饰者模式提供了一种更灵活的方式来组合对象的行为,相对于静态的继承,它更加优雅且易于维护。
  • 在运行时动态添加行为: 当需要在运行时决定对象是否添加某些行为,以及如何添加这些行为时,装饰者模式可以派上用场。
  • 分层次的配置: 装饰者模式允许你将各种功能按照层次结构进行组织和配置,从而更容易管理复杂的对象。
  • 可插拔性: 当你希望能够随时插入或删除功能时,装饰者模式允许你以灵活的方式添加或删除装饰器,从而实现可插拔性。
  • 不影响现有代码: 装饰者模式不需要修改现有对象的代码,因此适用于已经存在的类,无需改变其结构即可扩展功能。

实现

案例:我们工作中经常用到流程引擎,我们这次就用装饰器模式写一个小案例模拟流程引擎中流程动作的处理,可以做到随意打乱流程动作的顺序,可以随意增加和减少流程动作。

  • Component(组件)
public abstract class AbstractFlowAction
{
    public ulong Id { get; set; }

    public string Name { get; set; }

    public abstract void Excute();
}
  • ConcreteComponent(具体组件)
public class FlowActionInfo : AbstractFlowAction
{
    public override void Excute()
    {
        Console.WriteLine($"ID:{this.Id},Name:{this.Name}");
    }
}
  • Decorator(装饰器)
/// <summary>
/// 装饰器
/// </summary>
public abstract class AbstractDecorator : AbstractFlowAction
{
    AbstractFlowAction _action = null;
    public AbstractDecorator(AbstractFlowAction action)
    {
        _action = action;
    }

    public override void Excute()
    {
        this._action.Excute();
    }
}
  • ConcreteDecorator(具体装饰器)
/// <summary>
/// 内容检查
/// </summary>
public class ContentActionDecorator : AbstractDecorator
{
    public ContentActionDecorator(AbstractFlowAction action) : base(action)
    {
    }

    public override void Excute()
    {
        base.Excute();
        Console.WriteLine("开始内容检查...");
    }
}

 /// <summary>
 /// 格式检查
 /// </summary>
 public class FileFormatActionDecorator : AbstractDecorator
 {
     public FileFormatActionDecorator(AbstractFlowAction action) : base(action)
     {
     }

     public override void Excute()
     {
         base.Excute();
         Console.WriteLine("开始格式检查...");
     }
 }

 /// <summary>
 /// 杀毒动作
 /// </summary>
 public class VirusActionDecorator : AbstractDecorator
 {
     public VirusActionDecorator(AbstractFlowAction action) : base(action)
     {

     }

     public override void Excute()
     {
         base.Excute();
         Console.WriteLine("开始杀毒...");
     }
 }

.NET 设计模式—装饰器模式(Decorator Pattern),设计模式,设计模式,装饰器模式,java,.net,C#,结构性设计模式文章来源地址https://www.toymoban.com/news/detail-845177.html

到了这里,关于.NET 设计模式—装饰器模式(Decorator Pattern)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《golang设计模式》第二部分·结构型模式-04-装饰器模式(Decorator)

    装饰器(Decorator)通过包装(不是继承)的方式向目标对象中动态地添加或删除功能。 Component(抽象组件):定义了原始对象的接口,装饰器也会实现这个接口。 Concrete Component(具体组件):原始对象,以后装饰器会装饰它。 Decorator(抽象装饰器):关联/聚合了抽象组件,

    2024年02月09日
    浏览(49)
  • 【设计模式-05】Facade门面Mediator调停者 | Decorator装饰器 | Chain Of Responsibility责任链

    一般是系统内部相互交错,比如 消息中间件(MQ) 就是这种设计模式,对各个功能或系统之间进行解耦。 业务场景:论坛或者博客发表帖子或者评论,对敏感词过滤处理。使用责任链的模式进行过滤处理。 把变化的进行封装处理 核心代码实现 GitHub - jxaufang168/Design-Patterns: 设计

    2024年01月19日
    浏览(109)
  • (二)结构型模式:5、装饰器模式(Decorator Pattern)(C++实例)

    目录 1、装饰器模式(Decorator Pattern)含义 2、装饰器模式的UML图学习 3、装饰器模式的应用场景 4、装饰器模式的优缺点 5、C++实现装饰器模式的简单实例 1、装饰器模式(Decorator Pattern)含义 装饰模式(Decorator),动态地给一个对象添加一些额外地职责,就增加功能来说,装

    2024年02月12日
    浏览(41)
  • .NET 设计模式—迭代器模式(Iterator Pattern)

    简介 迭代器模式(Iterator Pattern)是一种行为型设计模式,它允许我们通过提供一种方法来访问聚合对象中的元素,而不需要暴露聚合对象的内部实现。在迭代器模式中,我们通过创建一个迭代器对象来遍历聚合对象中的元素,而不直接访问聚合对象本身。这使得我们可以更

    2024年04月15日
    浏览(41)
  • .NET 设计模式—享元模式(Flyweight Pattern)

    简介 享元模式(Flyweight Pattern)是一种结构型设计模式,它旨在减少系统中相似对象的内存占用或计算开销,通过共享相同的对象来达到节省资源的目的。 享元模式提供了一种高效地共享对象的方式,从而减少了内存占用和提高了性能,但需要注意的是,使用享元模式会增加

    2024年04月13日
    浏览(44)
  • Java设计模式-装饰模式

    装饰模式在Java领域是一种常见的设计模式,它能够在不改变对象原有结构的情况下,动态地为对象添加新的功能。它通过封装原有对象,在运行时动态地为对象添加新的行为或者修改原有行为,以扩展对象的功能。这种方式避免了继承的静态特性,让对象的行为可以根据需要

    2024年02月04日
    浏览(41)
  • Java 设计模式——装饰者模式

    (1)我们先来看一个快餐店的例子:快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦。而使用继承的方式存在的问题: 扩展性不好 :如果要再加一种配料(

    2024年02月16日
    浏览(48)
  • Java设计模式之一:装饰器模式

    目录 一、什么是装饰器模式 二、装饰器模式如何使用 三、装饰器模式的优势和应用场景   装饰器模式是一种结构型设计模式,允许通过动态地将新功能添加到现有对象上,来扩展其行为或修改其外观,同时不改变其原始类的结构 。 在装饰器模式中,有一个抽象基类(Com

    2024年02月13日
    浏览(55)
  • Java设计模式—组合模式(Composite Pattern)

            组合模式(Composite),将对象组合成树形结构以表示\\\'部分-整体\\\'的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 MenuComponent  抽象类:定义了菜单组件的基本行为,包括打印名称和管理子元素的方法。 Menu  类:表示菜单,可以包含其他

    2024年04月15日
    浏览(46)
  • Java设计模式之建造者模式详解(Builder Pattern)

    在日常的开发工作中,我们常常需要创建一些复杂的对象。这些对象可能包含许多不同的属性,并且这些属性的初始化过程可能相当复杂。在这种情况下,建造者模式是一种非常有用的设计模式,因为它允许我们分步骤地创建复杂的对象。 概念和原理: 建造者模式(Builder

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包