java實現(xiàn)裝飾器模式(Decorator Pattern)
一、什么是裝飾器模式
裝飾器模式(Decorator Pattern)允許向一個現(xiàn)有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現(xiàn)有的類的一個包裝。
這種模式創(chuàng)建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。
在不想增加更多子類的情況下擴展類,動態(tài)地給一個對象添加一些額外的職責。就增加功能來說,裝飾器模式相比生成子類更為靈活。
二、裝飾器模式的具體實現(xiàn)
1、結構圖
2、分析
裝飾器模式由組件和裝飾者組成。
- 抽象組件(Component):需要裝飾的抽象對象。
- 具體組件(ConcreteComponent):是我們需要裝飾的對象。
- 抽象裝飾類(Decorator):內(nèi)含指向抽象組件的引用及裝飾者共有的方法。
- 具體裝飾類(ConcreteDecorator):被裝飾的對象。
3、java 代碼實現(xiàn):
抽象組件:
package com.designpattern.decoratorPattern; /** * Component 組件 抽象角色 * @author zhongtao on 2018/10/23 */ public interface House { /** * 裝飾風格 */ void style(); }
具體組件:
/** * 具體組件 * @author zhongtao on 2018/10/23 */ public class ChineseStyle implements House { @Override public void style() { System.out.println("中式風格裝修"); } } /** * 具體組件 * @author zhongtao on 2018/10/23 */ public class EuropeanStyle implements House { @Override public void style() { System.out.println("歐式風格裝修"); } }
抽象裝飾類:
package com.designpattern.decoratorPattern; /** * 抽象裝飾類 * * @author zhongtao on 2018/10/23 */ public class HouseDecorator implements House { public House house; public HouseDecorator(House house) { this.house = house; } @Override public void style() { house.style(); } }
具體裝飾類:
package com.designpattern.decoratorPattern; /** * 具體裝飾類 * * @author zhongtao on 2018/10/23 */ public class RedDecorator extends HouseDecorator { public RedDecorator(House house) { super(house); } public void style() { this.house.style(); System.out.println("紅色裝飾墻"); } }
測試裝飾器模式:
package com.designpattern.decoratorPattern; import org.junit.Test; /** * 測試裝飾器模型 * * @author zhongtao on 2018/10/22 */ public class DecoratorPatternTest { /** * 測試裝飾器模型 */ @Test public void testDecoratorPattern(){ ChineseStyle chineseStyle = new ChineseStyle(); House redChineseStyle = new RedDecorator(new ChineseStyle()); House redEuropeanStyle = new RedDecorator(new EuropeanStyle()); System.out.println("中式裝修"); chineseStyle.style(); System.out.println("\n中式加紅色墻"); redChineseStyle.style(); System.out.println("\n歐式加紅色墻"); redEuropeanStyle.style(); } }
測試結果:
---中式裝修---
中式風格裝修
---中式加紅色墻---
中式風格裝修
紅色裝飾墻
---歐式加紅色墻---
歐式風格裝修
紅色裝飾墻
三、裝飾器的優(yōu)缺點
1、優(yōu)點
- 裝飾類和被裝飾類可以獨立發(fā)展,不會相互耦合。
- 裝飾器模式是繼承的一個替代模式。
- 裝飾器模式可以動態(tài)擴展一個實現(xiàn)類的功能。
2、缺點
多層裝飾比較復雜。
源碼地址
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Java連接Oracle數(shù)據(jù)庫完整步驟記錄
數(shù)據(jù)庫的操作是當前系統(tǒng)開發(fā)必不可少的開發(fā)部分之一,下面這篇文章主要給大家介紹了關于Java連接Oracle數(shù)據(jù)庫的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-01-01