設計模式——裝飾模式詳解
0. 前言
寫在最前面,本人的設計模式類博文,建議先看博文前半部分的理論介紹,再看後半部分的例項分析,最後再返回來複習一遍理論介紹,這時候你就會發現我在重點處標紅的用心,對於幫助你理解設計模式有奇效哦~本文原創,轉載請註明出處為的部落格。
裝飾模式是結構型設計模式之一,使用一種對客戶透明的方式來動態拓展物件的功能,Java IO中各種流的巢狀就是裝飾模式的很好體現。
1. 裝飾模式介紹
裝飾模式定義:
動態地給一個物件新增一些額外的功能,比生成子類要靈活。
裝飾模式的使用場景:
需要透明且動態地拓展類的功能的場景。
裝飾模式包括的角色:
(1)抽象元件Component類。
(2)元件具體實現ConcreteComponent
(3)抽象裝飾類Decorator,內部持有一個元件物件的引用,職責就是裝飾ConcreteComponent類。之所以是抽象的,就是為了方便不同的裝飾“風格”子類的自定義實現。
(4)具體裝飾類ConcreteDecorator。
2. 裝飾模式例項介紹
想到裝飾,很容易想到一個人穿衣服,在不同的季節穿不同的衣服,比如夏天穿短褲、冬天穿毛褲,但是不管什麼季節,內褲肯定是要穿的。
抽象元件Component類就可以是抽象類Person,而ConcreteComponent類就可以是具體的一個人Calvin,也是要被裝飾的物件。抽象裝飾類Decorator持有了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{ @Override public void dressed() { System.out.println("穿件內褲"); } } public static abstract class PersonCloth extends Person{ Person myPerson; public PersonCloth(Person myPerson) { this.myPerson = myPerson; } @Override public void dressed() { myPerson.dressed(); } } public static class SummerCloth extends PersonCloth{ public SummerCloth(Person myPerson) { super(myPerson); } @Override public void dressed() { super.dressed(); System.out.println("穿件短褲"); } } public static class WinterCloth extends PersonCloth{ public WinterCloth(Person myPerson) { super(myPerson); } @Override public void dressed() { super.dressed(); System.out.println("穿件毛褲"); } } }
3. 裝飾模式總結
裝飾模式動態地給一個物件新增一些額外的功能,相對於繼承的方式,更加靈活。
裝飾模式經常被誤認為是代理模式。裝飾模式是以對客戶透明的方式擴充套件物件的功能,是繼承關係的一個替代方案。而代理模式則是給一個物件提供一個代理物件,並由代理物件來控制原有物件的引用。
前者重在增加功能,後者重在對代理物件施加控制,不是對物件本身功能的增強。
相關推薦
設計模式——裝飾模式詳解
0. 前言寫在最前面,本人的設計模式類博文,建議先看博文前半部分的理論介紹,再看後半部分的例項分析,最後再返回來複習一遍理論介紹,這時候你就會發現我在重點處標紅的用心,對於幫助你理解設計模式有奇效哦~本
Java設計模式之享元模式實例詳解
AI ava flyweight lan trac home erro lin 代碼 本文實例講述了Java設計模式之享元模式。分享給大家供大家參考,具體如下: 解釋一下概念:也就是說在一個系統中如果有多個相同的對象,那麽只共享一份就可以了,不必每個都去實例化一個對象。比如
軟體開發,標準化流水線式開發的實施構想 Internet 服務匯流排 嵌入式通用行業應用平臺的靈魂和搭建 快速原型開發模式在實際開發過程中的應用 公用物件請求代理(排程)程式體系結構(CORBA) UML軟體設計基礎(UML圖詳解) (篇01)企業如何軟體商業化? (篇02)企業如何軟體商業化? 在
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
java設計模式(23種)詳解
設計模式(Design Patterns) ——可複用面向物件軟體的基礎 設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、程式碼設計經驗的總結。使用設計模式是為了可重用程式碼、讓程式碼更容易被他
android設計模式之mvp詳解
1,mvp模式介紹 mvp全稱model,view,presenter,目前mvp在 android應用開發中越來越屌,大家對mvp模式討論也越來越多,如果做了n年開發以後你還是簡單的呼叫api,簡單的堆程式碼,就太丟丟了,mvp能夠有效的降低view
設計模式六大原則詳解
引言 對於設計模式,自己很早之前就看了好多本設計模式書籍,其中一些還看了好幾遍,也一直希望自己能在編碼的時候把這些設計模式用上去。可是,在日常的打碼中,用的做多的就是單例,其次是觀察者和建造者模式 ( builder ) 用得比較多,其他的基本很少用到。 用不到的原因是還是不能夠理解設計模式的思想,無法將這些
小程序商城系統開發模式平臺搭建詳解
小程序 效果 商機 應用場景 模式 找到 成本 時代 哪些 小程序商城系統開發(李想.185.6504.8478)隨著移動互聯網的深入普及,流量碎片化的趨勢無法逆轉,百度、淘寶等平臺成本越來越高,效果卻越來越差,企業單一流量入口保持增長的時代結束。小程序二維碼多入口的訪問形
Javascript 嚴格模式(strict mode)詳解
eval ref 條件 ssa for this關鍵字 表示法 ocs 行為 Javascript 嚴格模式詳解 一、概述 除了正常運行模式,ECMAscript 5添加了第二種運行模式:"嚴格模式"(strict mode)。顧名思義,這種模式使得Jav
設計模式——裝飾模式
decorator text err span 方法 切換 rtu .text 指標 一、簡介 裝飾模式(Decorator)又名包裝器(Wrapper),屬於結構型模式的一種,采用遞歸的思想,用於包裝類,使其功能豐富。 例如:有一個統計圖表控件,可能需要有圖/表切換的功能
火爆的車享家模式系統開發詳解
目前 聯合體 移動互聯網 體系 通過 系列 獲得 com img 車享家是一個關於用車的全方位平臺!上線至今都十分火熱,盈利能力也強,通過結合“高效線上運營”和“優質線下服務”,全方位打通汽車“看、選、買、用、賣”,簡單來看,是淘寶+o2o的聯合體。目前汽車市場蓬勃發展,汽
設計模式 - 裝飾模式
void 去除 ora () override collect fin app names 裝飾模式(Decorator):動態的給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。 1 using System; 2 using System.
大話設計模式--裝飾模式 C++簡單例子
span 例子 簡單例子 new pre virt != code decorator 裝飾模式在對象動態增加功能方面優於繼承,用裝飾模式替代繼承,比繼承更加靈活。 小菜扮靚第三版 class person { public: virtual void show(
大話設計模式——裝飾模式和代理模式(一)
區別 接口 需要 構圖 技術分享 開閉 tro 可能 code 1、是什麽? 裝飾模式:動態地給一個對象添加額外的職責。 代理模式:其他對象通過對象A去訪問對象B。 2、為什麽用? 裝飾模式:1、遵循開閉原則,盡量不去修改原有的類。2、裝飾對象一般都是添加額外的
百惠優美模式APP開發詳解
百惠優美模式開發【張玲:⒈⒌⒍微⒉⒉⒎⒏電⒈⒌⒉⒏】,百惠優美模式商城系統開發,百惠優美系統平臺開發,百惠優美商城APP開發 Resource creation-資源創造。資源建立可能涉及分配新記憶體,將其對映到您的程序,並將其填充為零。通過從較大的堆或由堆支援的可迴圈資源記憶體建立資源,可以降低此成本。
大話設計模式--裝飾模式
裝飾模式:動態地給一個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活。 Component是定義了一個物件介面,可以給這些物件動態地新增職責,ConcreteComponent是定義了一個具體的物件,也可以給這些物件新增一些職責。Decorator,裝飾抽象類,繼承
軟考設計模式——裝飾模式(C++)
裝飾模式就是在不改變原來介面的情況下,給類新增功能。 舉個例子,在遊戲裡玩一個英雄,可以拿裝備,拿的這些個裝備就相當於是在裝飾自己。 其實有一個訣竅,就是這些類裡有一個方法名字都一樣,然後這些類先從外到內,然後從裡面開始一層層向外巢狀呼叫,相當於一直給這個方法里加東西
GPIO模式配置與詳解
一、GPIO配置 (1)GPIO_Mode_AIN 模擬輸入 (2)GPIO_Mode_IN_FLOATING 浮空輸入 (3)GPIO_Mode_IPD 下拉輸入 (4)GPIO_Mode_IPU 上拉輸入 (5)GPIO_Mode_Out_OD 開漏輸出 (6
C++設計模式——裝飾模式
前言 在實際開發時,你有沒有碰到過這種問題;開發一個類,封裝了一個物件的核心操作,而這些操作就是客戶使用該類時都會去呼叫的操作;而有一些非核心的操作,可能會使用,也可能不會使用;現在該怎麼辦呢? 將這些非核心的操作全部放到類中,這樣,一個類就包含了很多核心的操作和一些看似有關,但是又無關的操作;這就會
【程式設計素質】設計模式-裝飾模式(Decorator,包裝模式Wrapper)
1,概念 是動態地將責任附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。 是以對客戶端透明的方式擴充套件物件的功能,換句話說,客戶端不會察覺到裝飾前與裝飾後有什麼不同。 在不
設計模式--裝飾模式
裝飾模式又名包裝(Wrapper)模式。裝飾模式以對客戶端透明的方式擴充套件物件的功能,是繼承關係的一個替代方案。 1.裝飾模式的結構 裝飾模式以對客戶透明的方式動態地給一個物件附加上更多的責任。換言之,客戶端並不會覺得物件在裝飾前和裝飾後有什麼不同。裝飾模式可