国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

.NET 設計模式—裝飾器模式(Decorator Pattern)

這篇具有很好參考價值的文章主要介紹了.NET 設計模式—裝飾器模式(Decorator Pattern)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

簡介

裝飾者模式(Decorator Pattern)是一種結構型設計模式,它允許你在不改變對象接口的前提下,動態(tài)地將新行為附加到對象上。這種模式是通過創(chuàng)建一個包裝(或裝飾)對象,將要被裝飾的對象包裹起來,從而實現(xiàn)對原有對象功能的增強和擴展。

角色

  • Component(組件): 定義了一個抽象接口,可以是抽象類或接口,規(guī)定了被裝飾對象和裝飾器的共同接口。
  • ConcreteComponent(具體組件): 實現(xiàn)了組件接口的具體類,是被裝飾的對象。
  • Decorator(裝飾器): 也是組件接口的子類,它持有一個指向具體組件對象的引用,并可以附加新的行為。
  • ConcreteDecorator(具體裝飾器): 實現(xiàn)了裝飾器接口的具體類,負責為具體組件對象添加新的行為。

優(yōu)點

  • 裝飾器模式可以在不改變現(xiàn)有代碼的情況下,動態(tài)地擴展一個對象的功能。
  • 可以使用多個裝飾器來組合成一個對象,可以靈活地增強對象的功能。
  • 裝飾器模式遵循開閉原則,可以通過新增裝飾器來擴展功能,而無需修改已有代碼。

缺點

  • 過度的使用裝飾器模式會導致程序中出現(xiàn)大量的小類,可能會使程序結構變得復雜。
  • 如果過度地使用繼承來實現(xiàn)裝飾器模式,可能會導致設計失去靈活性和可復用性。

應用場景

  • 動態(tài)擴展功能: 當你需要在不修改現(xiàn)有對象的代碼的情況下,動態(tài)地向?qū)ο筇砑有鹿δ芑蛐袨闀r,裝飾者模式是一種非常有用的設計模式。
  • 避免類爆炸: 當有多個可能的組合方式時,避免創(chuàng)建大量子類的類層次結構,而使用裝飾者模式可以更靈活地組合不同的功能,避免類爆炸問題。
  • 組合優(yōu)于繼承: 裝飾者模式提供了一種更靈活的方式來組合對象的行為,相對于靜態(tài)的繼承,它更加優(yōu)雅且易于維護。
  • 在運行時動態(tài)添加行為: 當需要在運行時決定對象是否添加某些行為,以及如何添加這些行為時,裝飾者模式可以派上用場。
  • 分層次的配置: 裝飾者模式允許你將各種功能按照層次結構進行組織和配置,從而更容易管理復雜的對象。
  • 可插拔性: 當你希望能夠隨時插入或刪除功能時,裝飾者模式允許你以靈活的方式添加或刪除裝飾器,從而實現(xiàn)可插拔性。
  • 不影響現(xiàn)有代碼: 裝飾者模式不需要修改現(xiàn)有對象的代碼,因此適用于已經(jīng)存在的類,無需改變其結構即可擴展功能。

實現(xiàn)

案例:我們工作中經(jīng)常用到流程引擎,我們這次就用裝飾器模式寫一個小案例模擬流程引擎中流程動作的處理,可以做到隨意打亂流程動作的順序,可以隨意增加和減少流程動作。

  • 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>
/// 內(nèi)容檢查
/// </summary>
public class ContentActionDecorator : AbstractDecorator
{
    public ContentActionDecorator(AbstractFlowAction action) : base(action)
    {
    }

    public override void Excute()
    {
        base.Excute();
        Console.WriteLine("開始內(nèi)容檢查...");
    }
}

 /// <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#,結構性設計模式文章來源地址http://www.zghlxwxcb.cn/news/detail-845177.html

到了這里,關于.NET 設計模式—裝飾器模式(Decorator Pattern)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 《golang設計模式》第二部分·結構型模式-04-裝飾器模式(Decorator)

    《golang設計模式》第二部分·結構型模式-04-裝飾器模式(Decorator)

    裝飾器(Decorator)通過包裝(不是繼承)的方式向目標對象中動態(tài)地添加或刪除功能。 Component(抽象組件):定義了原始對象的接口,裝飾器也會實現(xiàn)這個接口。 Concrete Component(具體組件):原始對象,以后裝飾器會裝飾它。 Decorator(抽象裝飾器):關聯(lián)/聚合了抽象組件,

    2024年02月09日
    瀏覽(23)
  • 【設計模式-05】Facade門面Mediator調(diào)停者 | Decorator裝飾器 | Chain Of Responsibility責任鏈

    【設計模式-05】Facade門面Mediator調(diào)停者 | Decorator裝飾器 | Chain Of Responsibility責任鏈

    一般是系統(tǒng)內(nèi)部相互交錯,比如 消息中間件(MQ) 就是這種設計模式,對各個功能或系統(tǒng)之間進行解耦。 業(yè)務場景:論壇或者博客發(fā)表帖子或者評論,對敏感詞過濾處理。使用責任鏈的模式進行過濾處理。 把變化的進行封裝處理 核心代碼實現(xiàn) GitHub - jxaufang168/Design-Patterns: 設計

    2024年01月19日
    瀏覽(63)
  • (二)結構型模式:5、裝飾器模式(Decorator Pattern)(C++實例)

    (二)結構型模式:5、裝飾器模式(Decorator Pattern)(C++實例)

    目錄 1、裝飾器模式(Decorator Pattern)含義 2、裝飾器模式的UML圖學習 3、裝飾器模式的應用場景 4、裝飾器模式的優(yōu)缺點 5、C++實現(xiàn)裝飾器模式的簡單實例 1、裝飾器模式(Decorator Pattern)含義 裝飾模式(Decorator),動態(tài)地給一個對象添加一些額外地職責,就增加功能來說,裝

    2024年02月12日
    瀏覽(23)
  • .NET 設計模式—享元模式(Flyweight Pattern)

    簡介 享元模式(Flyweight Pattern)是一種結構型設計模式,它旨在減少系統(tǒng)中相似對象的內(nèi)存占用或計算開銷,通過共享相同的對象來達到節(jié)省資源的目的。 享元模式提供了一種高效地共享對象的方式,從而減少了內(nèi)存占用和提高了性能,但需要注意的是,使用享元模式會增加

    2024年04月13日
    瀏覽(19)
  • .NET 設計模式—迭代器模式(Iterator Pattern)

    簡介 迭代器模式(Iterator Pattern)是一種行為型設計模式,它允許我們通過提供一種方法來訪問聚合對象中的元素,而不需要暴露聚合對象的內(nèi)部實現(xiàn)。在迭代器模式中,我們通過創(chuàng)建一個迭代器對象來遍歷聚合對象中的元素,而不直接訪問聚合對象本身。這使得我們可以更

    2024年04月15日
    瀏覽(67)
  • Java設計模式-裝飾模式

    裝飾模式在Java領域是一種常見的設計模式,它能夠在不改變對象原有結構的情況下,動態(tài)地為對象添加新的功能。它通過封裝原有對象,在運行時動態(tài)地為對象添加新的行為或者修改原有行為,以擴展對象的功能。這種方式避免了繼承的靜態(tài)特性,讓對象的行為可以根據(jù)需要

    2024年02月04日
    瀏覽(23)
  • Java 設計模式——裝飾者模式

    Java 設計模式——裝飾者模式

    (1)我們先來看一個快餐店的例子:快餐店有炒面、炒飯這些快餐,可以額外附加雞蛋、火腿、培根這些配菜,當然加配菜需要額外加錢,每個配菜的價錢通常不太一樣,那么計算總價就會顯得比較麻煩。而使用繼承的方式存在的問題: 擴展性不好 :如果要再加一種配料(

    2024年02月16日
    瀏覽(20)
  • Java設計模式之一:裝飾器模式

    Java設計模式之一:裝飾器模式

    目錄 一、什么是裝飾器模式 二、裝飾器模式如何使用 三、裝飾器模式的優(yōu)勢和應用場景 ? 裝飾器模式是一種結構型設計模式,允許通過動態(tài)地將新功能添加到現(xiàn)有對象上,來擴展其行為或修改其外觀,同時不改變其原始類的結構 。 在裝飾器模式中,有一個抽象基類(Com

    2024年02月13日
    瀏覽(37)
  • Java設計模式—組合模式(Composite Pattern)

    Java設計模式—組合模式(Composite Pattern)

    ????????組合模式(Composite),將對象組合成樹形結構以表示\\\'部分-整體\\\'的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性。 MenuComponent ?抽象類:定義了菜單組件的基本行為,包括打印名稱和管理子元素的方法。 Menu ?類:表示菜單,可以包含其他

    2024年04月15日
    瀏覽(42)
  • Java設計模式之過濾器模式(Filter Pattern)

    過濾器模式(Filter Pattern)是一種常用的設計模式,它用于通過一系列條件來過濾對象集合,并將滿足條件的對象保留下來。該模式可以幫助我們在不修改原始對象集合的情況下,根據(jù)特定的條件對集合進行篩選和處理。 在過濾器模式中,通常有三個核心角色: 過濾器接口(

    2024年02月07日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包