設計模式--裝飾模式

裝飾模式(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");
	}
}
相關文章
相關標籤/搜索