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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

装饰者设计模式

發布時間:2024/9/30 asp.net 94 豆豆
生活随笔 收集整理的這篇文章主要介紹了 装饰者设计模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

裝飾者設計模式

  • 什么是裝飾者設計模式
  • 實戰

什么是裝飾者設計模式

裝飾者設計模式(Decorator Pattern)將某個方法進行增強,可以在被裝飾的方法執行前后加上想要的邏輯處理進行增強,又可以不改變現有的結構。這種模式創建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供額外的功能。
使用場景: 1、擴展一個類的功能。 2、動態增加功能,動態撤銷。
注意事項:可代替繼承

實戰

我們利用女孩化妝來演示裝飾者設計模式,首先我們定義一個接口,擁有展示的行為:

public interface Showable {void show(); }

當然女友會這門功夫了,所以實現了此行為并施展其“美麗的臉龐”了,但此時只是原生態的素顏。

public class Girl implements Showable {@Overridepublic void show() {System.out.print("女孩的素顏");} }

沒什么復雜的,直接調用的話會是素面朝天直面慘淡的人生,這樣當然達不到美顏效果了,何以一顧傾城。那么接下來要進行化妝了,這里必須依靠一種神秘而又昂貴的東西,化妝品登場了,它同樣實現了Showable接口。

public class Decorator implements Showable {/*** 擁有某個善于展示的對象*/private Showable showable;public Decorator(Showable showable){this.showable = showable;}@Overridepublic void show() {System.out.print("化妝(");showable.show();System.out.println(")");} }

我們可以發現,在構造化妝品類的時候可以把女孩給注入進來,目的在于調用女孩的show方法,但對于其原本的具體行為裝飾器一無所知,并且沒有加入任何邏輯限制,它所做的無非是“畫龍點睛”,“錦上添花”。接下來我們來運行一下看結果:

public class TestShowable {public static void main(String[] args) {//將需要被加強的對象傳遞給裝飾類new Decorator(new Girl()).show();//結果:打扮(女孩的素顏)} }

我們可以看到,只需要新建裝飾器的時候把女孩給包裝進去就得到了粉飾過的美顏,是不是非常簡單?然而此時有女朋友會嫌棄了,“只是打粉底這么簡單嗎?眼霜呢?口紅呢……”。

好吧,為了滿足女友的要求,我們得再多一些設計。想想看這些化妝品,不管是什么都有共同的特性,也就是說他們統統都可以裝飾原生態的素顏展示方法show,那我們何不把這些特性抽象出來呢?開始行動,修改我們的裝飾類

public abstract class Decorator implements Showable {/*** 擁有某個善于展示的對象*/protected Showable showable;public Decorator(Showable showable){this.showable = showable;}public void show() {//直接調用,不加任何裝飾showable.show();} }

我們把化妝品類給改成抽象類,重寫show方法,但不做任何粉飾了,這里我們留給子類具體的某個化妝品去做裝飾吧。化妝首先第一步一定要打底了,這里我們首先加入一個口紅類:

public class Lipstick extends Decorator{public Lipstick(Showable showable) {//調用父類構造賦值給成員屬性super(showable);}@Overridepublic void show() {System.out.print("涂口紅(");showable.show();System.out.print(")");} }

涂完口紅,最后再噴點香水吧。同樣的,我們再定義一個香水類:

public class Perfume extends Decorator {public Perfume(Showable showable) {super(showable);}@Overridepublic void show() {System.out.println("噴香水(");showable.show();System.out.println(")");} }

最后,我們把女友、口紅、香水層層包裹起來并運行,結果如愿以償。

public class TestShowable {public static void main(String[] args) {//將需要被加強的對象傳遞給裝飾類,層層包裹起來,每一層都多了一些功能new Perfume(new Lipstick(new Girl())).show();//結果: 噴香水(涂口紅(女孩的素顏))} }

如果女友對這種淡妝效果還是不滿意,我們可以繼續添加化妝品類,睫毛膏、眼線、眉筆、腮紅等等等等,只需要層層包裹起來,最終實現女友濃妝艷抹的夢想。

我們觀察這種裝飾器模式結構,是不是似曾相識呢?沒錯,其實裝飾器模式在JDK里就有很多應用,比如Java IO包里的眾多流處理類。

new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));

當然,流處理類當然要比我們的例子復雜的多,但其基本思想和我們去繁就簡的例子異途同歸,這些對象就好像是俄羅斯套娃一樣層層包裹,層層裝飾,每套一層就會多出一些功能出來,我們更可以自由搭配,實現不同的組合功能。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

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

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