最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

設(shè)計模式之裝飾者模式

2020-05-07 21:02 作者:Ushua  | 我要投稿

本文將深入學(xué)習(xí)設(shè)計模式中的裝飾者模式。

定義

再不改變原有對象的基礎(chǔ)之上,將功能附加到對象上。提供了比繼承更有彈性的替代方案(擴展原有對象功能)。

類型

結(jié)構(gòu)型

適用場景

1、擴展一個類的功能或者給一個類添加附加職責(zé)。

2、給一個對象動態(tài)添加功能,或者動態(tài)撤銷功能。

優(yōu)點

1、是繼承關(guān)系的有力補充,比繼承靈活,在不改變原有對象的情況下給一個對象擴展功能。(繼承在擴展功能上是靜態(tài)的,必須在編譯時就確定好,而使用裝飾者沒事可以在運行時決定,裝飾者也建立在繼承基礎(chǔ)之上的)

2、通過使用不同裝飾類以及這些類的組合排列關(guān)系,可以實現(xiàn)不同的效果。

3、符合開閉原則。

缺點

1、會出現(xiàn)更多的代碼,更多的類,增加程序的復(fù)雜性。

2、動態(tài)裝飾時,多層裝飾會更復(fù)雜。(使用繼承類擴展功能會增加類的數(shù)量,使用裝飾者模式不會像繼承那樣增加那么多類的數(shù)量但是會增加對象的數(shù)量,當(dāng)對象的數(shù)量增加到一定的級別時,無疑會大大增加我們代碼調(diào)試的難度)。

裝飾者相關(guān)的設(shè)計模式

裝飾者和代理模式

裝飾者模式關(guān)注的是對象的動態(tài)添加功能。代理模式關(guān)注的是對對象的控制訪問,對它的用戶隱藏對象的具體信息。

裝飾者模式和適配器模式

裝飾者模式和被裝飾的類要實現(xiàn)同一接口,或者裝飾類是被裝飾的類的子類。適配器模式和被適配的類具有不同的接口。

使用場景

煎餅果子。

煎餅果子一般的話都是可以加雞蛋加香腸什么的,好那我們就來模擬一下加在煎餅果子上加?xùn)|西的操作。

首先我們看一下使用繼承的方式怎么實現(xiàn)。

創(chuàng)建一個煎餅果子類

煎餅果子,8塊錢一個

加雞蛋類,我們讓加雞蛋類繼承煎餅果子類

煎餅加雞蛋,加幾個?加一個

加香腸類,同樣的繼承煎餅果子類。

煎餅香腸,2塊錢

測試類

測試測試

這樣做有個問題,假設(shè)我們現(xiàn)在要加2個雞蛋呢?我們沒有寫加兩個雞蛋的類,如果還有3個4個什么的那是不是還要重寫這樣的類?下面我們使用裝飾者模式實現(xiàn)以下。

首先我們定義一個抽象的煎餅果子

abstract的煎餅果子

實體煎餅果子類,實體煎餅果子繼承了抽象煎餅果子類。

一個實體煎餅果子

裝飾父類,這里也是可以使用抽象類,等會兒我們再說什么時候使用抽象類什么時候使用實體類。注意構(gòu)造器和這個里面的花費,描述方法的寫法。這里注入一個抽象煎餅類的對象。我們的獲取描述花費的操作都委托抽象煎餅類來執(zhí)行,為什么要這么做可以去看看我們之前的文章依賴倒置原則。

父親裝飾類

雞蛋裝飾類,這里注意他的構(gòu)造器,參數(shù)是父類的對象抽象煎餅類對象,這里獲取描述和花費方法都是調(diào)用父類的方法。

egg裝飾類

香腸裝飾類:

加香腸,多2元

測試類:

測試兩下

輸出結(jié)果:

I`m result.

最后我們說說裝飾父類什么時候使用抽象類。一般當(dāng)我們需要在具體的類中都需要執(zhí)行一些特定的操作時。我們一般都會使用抽象類,并定義抽象方法。

自定義抽象方法



設(shè)計模式之裝飾者模式的評論 (共 條)

分享到微博請遵守國家法律
夹江县| 潞西市| 大悟县| 岱山县| 伊金霍洛旗| 建湖县| 谢通门县| 锦屏县| 河源市| 平武县| 祁阳县| 瑞金市| 太康县| 额尔古纳市| 剑阁县| 图木舒克市| 苏尼特左旗| 永兴县| 静海县| 宜宾县| 娱乐| 汝南县| 高平市| 屏山县| 苗栗县| 波密县| 祁门县| 太仆寺旗| 苍溪县| 迭部县| 灵川县| 桐梓县| 诸暨市| 新河县| 昌乐县| 开原市| 曲阜市| 宝鸡市| 马尔康县| 鸡西市| 两当县|