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