Java程式設計 設計模式之裝飾者模式

2021-09-11 06:04:37 字數 3084 閱讀 5537

目錄簡介

做饅頭例項

ibread介面

normalbread類

abstractbread抽象類

sweetdecorator類

testdemo測試類

執行結果

生產汽車例項

icar介面

googlecar實現的類

增強汽車mycar類

測試類執行結果

裝飾者模式的主要功能就是對乙個類的功能進行擴充!

對於需要對某個類擴充,但是該類是final類,不能被繼承,這是時候可以用裝飾者模式來實現。

要實現裝飾者模式,注意一下幾點內容:

1.裝飾者類要實現真實類同樣的介面

2.裝飾者類內有乙個真實物件的引用(可以通過裝飾者類的構造器傳入)

3.裝飾類物件在主類中接受請求,將請求傳送給真實的物件(相當於已經將引用傳遞到了裝飾類的真實物件)

4.裝飾者可以在傳入真實物件後,增加一些附加功能(因為裝飾物件和真實物件都有同樣的方法,裝飾物件可以新增一定操作在呼叫真實物件的方法,或者先呼叫真實物件的方法,再新增自己的方法)

5.不用繼承

1、如果有乙個做饅頭的介面ibread,定義了做饅頭的標準。

2、做正常饅頭需要實現這個介面,實現裡面的方法。

3、我們有個要做「甜蜜素」的甜饅頭需求,就需要對做正常饅頭的類的功能加強。

一先實現做麵包的介面

包括準備材料,和面,蒸饅頭,加工饅頭(即呼叫前面三個步驟)

package com.zhujunwei.decorator;

public inte***ce ibread

正常做饅頭的類。

package com.zhujunwei.decorator;

public class normalbread implements ibread

@override

public void kneadflour()

@override

public void steamed()

@override

public void process()

}

定義製作饅頭的抽象類

package com.zhujunwei.decorator;

public abstract class abstractbread implements ibread

@override

public void prepair()

@override

public void kneadflour()

@override

public void steamed()

@override

public void process()

}

增強的普通饅頭的甜饅頭類

package com.zhujunwei.decorator;

public class sweetdecorator extends abstractbread

public void paint()

@override

public void kneadflour()

}

測試類

package com.zhujunwei.decorator;

public class testdemo

}

【開始】生產正常的饅頭

準備麵粉,水以及發酵粉...

和麵...

蒸饅頭...香噴噴的饅頭出爐了

【結束】生產正常的饅頭

【開始】生產甜饅頭

準備麵粉,水以及發酵粉...

新增甜蜜素...

和麵...

蒸饅頭...香噴噴的饅頭出爐了

【結束】生產甜饅頭

現在有乙個生產汽車的介面,定義了汽車的標準(啟動、執行、停止)。

google汽車對這個介面進行了實現,並定義成了final類(不讓別人動我的東西)。

然後需求來了,我們需要對這個google汽車的功能進行增強,但是發現google這個final類,不能被繼承,這個時候就需要用到裝飾者模式。

我們需要定義乙個裝飾類,這個類實現了google汽車實現的介面,在這個裝飾類中定義了乙個google汽車類的物件,在裝飾類例項化的時候傳入乙個google汽車類,有這個汽車類在實現的介面中呼叫方法,在需要增強的方法中再修改。

還是看**吧!!

package com.zhujunwei.decorator2;

public inte***ce icar

package com.zhujunwei.decorator2;

//相當於mysql驅動包,谷歌汽車開發人員實現類

public final class googlecar implements icar

@override

public void run()

@override

public void stop()

}

package com.zhujunwei.decorator2;

public class mycar implements icar

@override

public void start()

@override

public void run()

@override

public void stop()

}

package com.zhujunwei.decorator2;

public class testcar

}

檢查天氣是否良好

檢查路況是否擁堵

控制谷歌的汽車啟動

控制谷歌的汽車執行

控制谷歌的汽車停止

Java設計模式 裝飾者模

裝飾者模式,其實不難理解,簡單地說就是裝飾者和被裝飾者擁有共同的超類,裝飾者只是豐富了行為,拓展了功能,而型別是不變的。說起來可能比較抽象,接下來通過乙個簡單的例子來實現乙個裝飾者模式。動態的給乙個物件新增一些額外的職責或者功能,就增加功能來說,裝飾者模式相比生成子類更為靈活。大多數情況下被裝飾者不...

併發程式設計設計模式 Copy on Write模式

copy on write模式一種延時策略,只有在真正需要複製的時候才複製,而不是提前複製好,同時 copy on write 還支援按需複製.copy on write 最大的應用領域還是在函式式程式設計領域函式式程式設計的基礎是不可變性 immutability 所以函式式程式設計裡面所有的修改...

java設計模式之裝飾者模式

裝飾者模式 動態的將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。類圖 barbecue類 實現 package com.decorator public abstract class barbecue public abstract double cost fish類 ...