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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

设计模式——装饰模式详解

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

0. 前言 ?

寫在最前面,本人的設(shè)計模式類博文,建議先看博文前半部分的理論介紹,再看后半部分的實例分析,最后再返回來復(fù)習(xí)一遍理論介紹,這時候你就會發(fā)現(xiàn)我在重點處標紅的用心,對于幫助你理解設(shè)計模式有奇效哦~本文原創(chuàng),轉(zhuǎn)載請注明出處為SEU_Calvin的博客。

裝飾模式是結(jié)構(gòu)型設(shè)計模式之一,使用一種對客戶透明的方式來動態(tài)拓展對象的功能,Java IO中各種流的嵌套就是裝飾模式的很好體現(xiàn)。

?

1. 裝飾模式介紹

裝飾模式定義:

動態(tài)地給一個對象添加一些額外的功能,比生成子類要靈活。

?

裝飾模式的使用場景:

需要透明且動態(tài)地拓展類的功能的場景。

?

裝飾模式包括的角色:

?

1)抽象組件Component類。

2)組件具體實現(xiàn)ConcreteComponent類。也是被裝飾的對象

3)抽象裝飾類Decorator內(nèi)部持有一個組件對象的引用,職責(zé)就是裝飾ConcreteComponent。之所以是抽象的,就是為了方便不同的裝飾“風(fēng)格”子類的自定義實現(xiàn)。

4)具體裝飾類ConcreteDecorator

?

2. ?裝飾模式實例介紹

想到裝飾,很容易想到一個人穿衣服,在不同的季節(jié)穿不同的衣服,比如夏天穿短褲、冬天穿毛褲,但是不管什么季節(jié),內(nèi)褲肯定是要穿的。

抽象組件Component類就可以是抽象類Person,而ConcreteComponent類就可以是具體的一個人Calvin,也是要被裝飾的對象。抽象裝飾類Decorator持有了Calvin的引用,并且回調(diào)了Calvin本身的一個“穿內(nèi)褲”的行為,并且在具體的裝飾類中,即“冬夏”兩個類中,分別為主人公Calvin穿上了毛褲和短褲,為對象增加了額外的功能。代碼也比較簡單,如下所示。

/*** Decorator Pattern* Created by Calvin on 2017/5/10.*/ public class Decorator {public static void main(String[] args) {Person calvin = new Calvin();PersonCloth summerCloth = new SummerCloth(calvin);PersonCloth winterCloth = new WinterCloth(calvin);summerCloth.dressed();winterCloth.dressed();}public static abstract class Person{public abstract void dressed();}public static class Calvin extends Person{@Overridepublic void dressed() {System.out.println("穿件內(nèi)褲");}}public static abstract class PersonCloth extends Person{Person myPerson;public PersonCloth(Person myPerson) {this.myPerson = myPerson;}@Overridepublic void dressed() {myPerson.dressed();}}public static class SummerCloth extends PersonCloth{public SummerCloth(Person myPerson) {super(myPerson);}@Overridepublic void dressed() {super.dressed();System.out.println("穿件短褲");}}public static class WinterCloth extends PersonCloth{public WinterCloth(Person myPerson) {super(myPerson);}@Overridepublic void dressed() {super.dressed();System.out.println("穿件毛褲");}} }

3.? 裝飾模式總結(jié)

裝飾模式動態(tài)地給一個對象添加一些額外的功能,相對于繼承的方式,更加靈活。

裝飾模式經(jīng)常被誤認為是代理模式。裝飾模式是以對客戶透明的方式擴展對象的功能,是繼承關(guān)系的一個替代方案。而代理模式則是給一個對象提供一個代理對象,并由代理對象來控制原有對象的引用

前者重在增加功能,后者重在對代理對象施加控制,不是對對象本身功能的增強。

總結(jié)

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

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