日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

详解设计模式:装饰器模式

發(fā)布時間:2023/12/29 asp.net 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详解设计模式:装饰器模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

裝飾器模式(Decorator Pattern)也稱為包裝模式(Wrapper Pattern),是 GoF 的 23 種設計模式中的一種結構型設計模式。裝飾器模式 是指在不改變原有對象的基礎之上,將功能附加到對象上,提供了比繼承更有彈性的替代方案(擴展原有對象的功能)。

裝飾器模式 的核心是功能擴展,使用裝飾器模式可以透明且動態(tài)地擴展類的功能

本篇內容包括:關于裝飾器模式、裝飾器實現(xiàn) Demo


文章目錄

    • 一、關于裝飾器模式
        • 1、關于裝飾器模式
        • 2、關于裝飾器模式的構成
        • 3、關于裝飾器模式的UML
        • 4、關于裝飾器模式的優(yōu)缺點
        • 5、裝飾器模式、代理模式之間的區(qū)別
    • 二、裝飾器實現(xiàn) Demo
        • 1、Demo 實現(xiàn)
        • 2、Demo 測試


一、關于裝飾器模式

1、關于裝飾器模式

裝飾器模式(Decorator Pattern)也稱為包裝模式(Wrapper Pattern),是 GoF 的 23 種設計模式中的一種結構型設計模式。

裝飾器模式 是指在不改變原有對象的基礎之上,將功能附加到對象上,提供了比繼承更有彈性的替代方案(擴展原有對象的功能)。

裝飾器模式 的核心是功能擴展,使用裝飾器模式可以透明且動態(tài)地擴展類的功能

2、關于裝飾器模式的構成

適配器模式一般包含四種角色:

  • 抽象構件(Component)角色:定義一個抽象接口以規(guī)范準備接收附加責任的對象。
  • 具體構件(ConcreteComponent)角色:實現(xiàn)抽象構件,通過裝飾角色為其添加一些職責。
  • 抽象裝飾(Decorator)角色:繼承抽象構件,并包含具體構件的實例,可以通過其子類擴展具體構件的功能。
  • 具體裝飾(ConcreteDecorator)角色:實現(xiàn)抽象裝飾的相關方法,并給具體構件對象添加附加的責任。
  • 3、關于裝飾器模式的UML

    4、關于裝飾器模式的優(yōu)缺點

    # 裝飾器模式的優(yōu)點

    • 功能擴展靈活,而不依賴繼承;
    • 可以對同一個對象進行多種裝飾;

    # 裝飾器模式的缺點

    裝飾方式可能比較復雜,如果嵌套太多,容易造成代碼可讀性變差和出錯。

    5、裝飾器模式、代理模式之間的區(qū)別

    對裝飾器模式來說,裝飾者(decorator)和被裝飾者(decoratee)都實現(xiàn)同一個接口。對代理模式來說,代理類(proxy class)和真實處理的類(real class)都實現(xiàn)同一個接口,他們之間的邊界確實比較模糊,兩者都是對類的方法進行擴展,具體區(qū)別如下:

  • 裝飾器模式強調的是增強自身,在被裝飾之后你能夠在被增強的類上使用增強后的功能。增強后你還是你,只不過能力更強了而已;代理模式強調要讓別人幫你去做一些本身與你業(yè)務沒有太多關系的職責(記錄日志、設置緩存)。代理模式是為了實現(xiàn)對象的控制,因為被代理的對象往往難以直接獲得或者是其內部不想暴露出來。
  • 裝飾模式是以對客戶端透明的方式擴展對象的功能,是繼承方案的一個替代方案;代理模式則是給一個對象提供一個代理對象,并由代理對象來控制對原有對象的引用;

  • 二、裝飾器實現(xiàn) Demo

    1、Demo 實現(xiàn)

    # Component 抽象構件角色

    interface Component {public void operation(); }

    # ConcreteComponent 具體構件角色

    class ConcreteComponent implements Component {public ConcreteComponent() {System.out.println("創(chuàng)建具體構件角色");}public void operation() {System.out.println("調用具體構件角色的方法operation()");} }

    # Decorator 抽象裝飾角色

    abstract class Decorator implements Component {private Component component;public Decorator(Component component) {this.component = component;}public void operation() {component.operation();} }

    # ConcreteDecorator 具體裝飾角色

    class ConcreteDecorator extends Decorator {public ConcreteDecorator(Component component) {super(component);}public void operation() {super.operation();addedFunction();}public void addedFunction() {System.out.println("為具體構件角色增加額外的功能addedFunction()");} }

    2、Demo 測試

    public class Client {public static void main(String[] args) {Component p = new ConcreteComponent();p.operation();Component d = new ConcreteDecorator(p);d.operation();} }

    總結

    以上是生活随笔為你收集整理的详解设计模式:装饰器模式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。