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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

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

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

裝飾器模式(Decorator Pattern)也稱為包裝模式(Wrapper Pattern),是 GoF 的 23 種設(shè)計(jì)模式中的一種結(jié)構(gòu)型設(shè)計(jì)模式。裝飾器模式 是指在不改變?cè)袑?duì)象的基礎(chǔ)之上,將功能附加到對(duì)象上,提供了比繼承更有彈性的替代方案(擴(kuò)展原有對(duì)象的功能)。

裝飾器模式 的核心是功能擴(kuò)展,使用裝飾器模式可以透明且動(dòng)態(tài)地?cái)U(kuò)展類的功能

本篇內(nèi)容包括:關(guān)于裝飾器模式、裝飾器實(shí)現(xiàn) Demo


文章目錄

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


一、關(guān)于裝飾器模式

1、關(guān)于裝飾器模式

裝飾器模式(Decorator Pattern)也稱為包裝模式(Wrapper Pattern),是 GoF 的 23 種設(shè)計(jì)模式中的一種結(jié)構(gòu)型設(shè)計(jì)模式。

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

裝飾器模式 的核心是功能擴(kuò)展,使用裝飾器模式可以透明且動(dòng)態(tài)地?cái)U(kuò)展類的功能

2、關(guān)于裝飾器模式的構(gòu)成

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

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

    4、關(guān)于裝飾器模式的優(yōu)缺點(diǎn)

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

    • 功能擴(kuò)展靈活,而不依賴?yán)^承;
    • 可以對(duì)同一個(gè)對(duì)象進(jìn)行多種裝飾;

    # 裝飾器模式的缺點(diǎn)

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

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

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

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

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

    1、Demo 實(shí)現(xiàn)

    # Component 抽象構(gòu)件角色

    interface Component {public void operation(); }

    # ConcreteComponent 具體構(gòu)件角色

    class ConcreteComponent implements Component {public ConcreteComponent() {System.out.println("創(chuàng)建具體構(gòu)件角色");}public void operation() {System.out.println("調(diào)用具體構(gòu)件角色的方法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("為具體構(gòu)件角色增加額外的功能addedFunction()");} }

    2、Demo 測(cè)試

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

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。