Java中常用的設計模式之裝飾器模式詳解
優點
1.裝飾類和被裝飾類可以獨立發展,不會相互耦合,裝飾模式是繼承的一個替代模式,裝飾模式可以動態擴展一個實現類的功能。
缺點
2.多層裝飾比較復雜。
使用場景
1.擴展一個類的功能。
2.動態增加功能,動態撤銷。
一、實現方式
假設一個場景,我們房間每天起床都要刷牙, 睡覺也要刷牙,刷牙的動作就是一個裝飾器的作用,這樣更利於我們的口腔健康。接下來我們就看看具體的裝飾器如何實現。
1、每天生活的接口
package com.asurplus.common.decorator; /** * 每天的生活接口 */ public interface Live { /** * 每天需要做的事情 */ void live(); }
2、起床的實現類
package com.asurplus.common.decorator; import lombok.extern.slf4j.Slf4j; /** * 起床實現類 */ @Slf4j public class GetUpLive implements Live { @Override public void live() { log.info("起床瞭"); } }
3、睡覺的實現類
package com.asurplus.common.decorator; import lombok.extern.slf4j.Slf4j; /** * 睡覺實現類 */ @Slf4j public class SleepLive implements Live { @Override public void live() { log.info("睡覺瞭"); } }
4、裝飾器類
package com.asurplus.common.decorator; import lombok.extern.slf4j.Slf4j; /** * 裝飾器類 */ @Slf4j public class LiveDecorator { private Live live; public LiveDecorator(Live live) { this.live = live; } public void live() { // 生活 live.live(); // 刷牙 brushTeeth(); } private void brushTeeth() { log.info("刷牙去咯"); } }
二、測試
package com.asurplus.common.decorator; /** * 裝飾器模式 */ public class TestMain { public static void main(String[] args) { // 起床 LiveDecorator getUp = new LiveDecorator(new GetUpLive()); getUp.live(); System.out.println(); // 睡覺 LiveDecorator sleep = new LiveDecorator(new SleepLive()); sleep.live(); } }
輸出結果
可以看出,起床和睡覺,都刷瞭牙,從而實現瞭我們的裝飾器模式。
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- Java中常用的設計模式之策略模式詳解
- Java中常用的設計模式之模板模式詳解
- Java中常用的設計模式之觀察者模式詳解
- Java中常用的設計模式之責任鏈模式詳解
- Java中常用的設計模式之單例模式詳解