Java設計模式 裝飾模式

2021-07-12 07:49:44 字數 2541 閱讀 9343

目錄

裝飾模式

定義:通用類圖:

角色分類:

抽象構件(component)

具體構件(concretecomponent)

裝飾角色(docorator)

具體裝飾角色(concretedecoratora和b)

裝飾模式與類繼承的區別:

裝飾模式的特點:

案例分析:

輸出結果如圖所示:

分析1:

分析2:

分析3:

分析4:

分析5:

分析6:

分析7:

是一種比較常見的模式

動態的給乙個物件新增一些額外的職責。就增加功能來說,裝飾模式比生成子類更加靈活。

是乙個介面或者是抽象類,就是定義我們最核心的物件,也就是原始的物件。

******在裝飾模式中必須有乙個最基本,最核心,最原始的介面或者抽象類來充當component抽象構件******

是最核心,最原始,最基本的介面或者抽象類的實現,你要裝飾的就是它。

一般是乙個抽象類,做什麼用呢?實現介面或者抽象方法,它裡面可不一定有抽象方法呀,在它的屬性裡必然有乙個private變數指向component抽象構件。

是兩個具體的裝飾類,你要把你最核心,最原始,最基本的東西裝飾成其他東西。

package zhuangshimoshi;

/* * 裝飾模式

*/public class test

}//抽象構件

abstract class component

//具體構件

class concretecomponent extends component }

//抽象裝飾者,一般為乙個抽象類

abstract class decorator extends component

//委託給被修飾者執行

public void operate() }

//具體的裝飾類

class concretedecorator1 extends decorator

//定義自己的修飾方法

private void method1()

//重寫父類的operate方法

public void operate()

}class concretedecorator2 extends decorator

//定義自己的修飾方法

private void method2()

//重寫父類的operate方法

public void operate()

}

主函式中執行了com=new concretedecorator1(com);這個語句,將呼叫concretedecorator1的建構函式,接著呼叫父類的建構函式,所以輸出了一句「這裡是抽象類decortor...」。

同理執行了com=new concretedecorator2(com);也輸出了「這裡是抽象類decortor...」。

執行了com.operate(),首先是concretedecorator2類的operate()方法被執行,即super.operate();,此時要執行其父類的operate()。父類decorator的operate()方法被執行,輸出了「父類的操作方法...」。

接著執行this.component.operate();語句。注意了!!!!此時component物件指的是concretedecorator1類的物件,即將要執行的concretedecorator1類中的operate()方法,所以輸出了"method1修飾。。。"

接著執行super.operate();語句,又回到父類decorator中的operate()方法,輸出了「父類的操作方法...」。

接著執行this.component.operate();語句。注意了!!!!此時component物件指的是concretecomponent類的物件,所以執行concretecomponent類的operate()方法。所以輸出了"這裡是具體構件,實現了抽象構件中的方法"。

最後執行this.method2();語句,輸出"method2修飾。。。"

以上是本例的詳細解釋,得多看幾遍細細領悟才行。

Java 設計模式 裝飾模式

看了大話設計模式此章節多遍才稍微有點理解,特此記錄。深入淺出,通俗易懂。情景 小菜要去見未來女友 嬌嬌,來個服裝打扮的設計。第一彈 客戶端 public static void main string args 問題來了,嬌嬌喜歡超人,小菜這次想穿的是超人,咋辦?直接修改小菜的類嗎?這就違背了開閉原...

java設計模式 裝飾模式

什麼是裝飾模式 裝飾模式就是動態的為乙個物件新增新的功能,它是一種代替繼承的技術,毋須通過繼承增加子類就能拓展物件功能的模式。開發中應用場景 1.io流中,設計的輸入和輸出 2.servlet api提供的乙個re quest物件的decrator模式的預設實現類httpservletrequest...

java設計模式 裝飾模式

裝飾 decorator 模式又叫做包裝模式。通 過一種對客戶端透明的方式來擴充套件物件的功能,是繼承關係的乙個替換方案。抽象元件角色 乙個抽象介面,是被裝飾類和 裝飾類的父介面。具體元件角色 為抽象元件的實現類。抽象裝飾角色 包含乙個元件的引用,並定義了 與抽象元件一致的介面。具體裝飾角色 為抽象...