裝飾模式(decorator,別名Wrapper):java
給一個對象增長一些新的功能,並且是動態的,要求裝飾對象和被裝飾對象實現同一個接口,裝飾對象持有被裝飾對象的實例。
裝飾器模式的應用場景:app
1.須要擴展一個類的功能。 2.動態的爲一個對象增長功能,並且還能動態撤銷。
裝飾器模式的缺點:ide
1.產生過多類似的對象,不易排錯
示例:測試
裝飾者模式測試類GirlDecoratorTest.javathis
/** * 裝飾者模式測試類 * * @author Kevin * @date 2016-3-15 */ public class GirlDecoratorTest { public static void main(String[] args) { ChineseGirlImpl girl = new ChineseGirlImpl(); GirlDecoratorImpl decorator = new GirlDecoratorImpl(girl); decorator.description(); } }
描述接口類Description.javacode
/** * 描述接口 * * @author Kevin * @date 2016-3-15 */ public interface Description { /** * 描述 * * @author Kevin */ void description(); }
中國女孩類(被裝飾類)ChineseGirlImpl.java對象
/** * 中國女孩類(被裝飾類) * * @author Kevin * @date 2016-3-15 */ public class ChineseGirlImpl implements Description { @Override public void description() { System.out.println("ChineseGirl goodness"); } }
女孩裝飾類(裝飾類,能夠爲被裝飾類添加功能)GirlDecoratorImpl.java接口
/** * 女孩裝飾類(裝飾類,能夠爲被裝飾類添加功能) * * @author Kevin * @date 2016-3-15 */ public class GirlDecoratorImpl implements Description { /* 中國女孩類(被裝飾類) */ private ChineseGirlImpl chineseGirl; public GirlDecoratorImpl() { } public GirlDecoratorImpl(ChineseGirlImpl chineseGirl) { this.chineseGirl = chineseGirl; } @Override public void description() { System.out.println("before decorator"); chineseGirl.description(); System.out.println("after decorator"); System.out.println("chineseGirl goodness and beautiful"); } }