Java——裝飾者設計模式

結合了一些百度百科的概念然後使用代碼進行理解~

裝飾者模式:

指的是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。

使用場景:

  • ​​​​​​​需要擴展一個類的功能,或給一個類添加附加職責。
  • 需要動態的給一個對象添加功能,這些功能可以再動態的撤銷。
  • ​​​​需要增加由一些基本功能的排列組合而產生的非常大量的功能,從而使繼承關係變的不現實。
  • 當不能採用生成子類的方法進行擴充時。一種情況是,可能有大量獨立的擴展,爲支持每一種組合將產生大量的子類,使得子類數目呈爆炸性增長。另一種情況可能是因爲類定義被隱藏,或類定義不能用於生成子類。

 這裏針對第四種情況給出案例代碼,以後碰到了會補充~

在這個案例代碼中,我們假設不知道Waitress的具體實現,要擴展,可是不能使用繼承父類的方式,所以自己定義一個WaitressWrap實現Waiter接口。

Waiter.java

package wraper;

public interface Waiter {
	void service();
}

Waitress.java

package wraper;

public class Waitress implements Waiter {

	@Override
	public void service() {
		System.out.println("hello waiter");
	}
}

WaitressWrap.java

package wraper;

public class WaitressWrap implements Waiter{
	Waiter waiter=null;
	public WaitressWrap(Waiter waiter){
		this.waiter=waiter;
	}
	@Override
	public void service() {
		System.out.println("hello waiter+2");
		waiter.service();  
	}
}

Test.java

package wraper;

public class Test {
	public static void main(String[] args){
		/*
		Waiter wa=new Waitress();
		wa.service();
		*/
		WaitressWrap ww=new WaitressWrap(new Waitress());
		ww.service();
	}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章