設計模式:裝飾器模式

1. 類的功能擴展

面向對象設計中, 可擴展通常是類設計中的一項重要考量. 在不改變原有類的情況下, 對當前類進行擴展的最直接方法是繼承當前類, 並在子類中擴展其功能. 然而, 如果我們對當前類的擴展並不是專屬與該類的, 例如對其他類也可能需要進行該功能的擴展, 則如果使用繼承模式, 我們需要對每一個待擴展類分別繼承, 並在子類中添加相同的擴展功能代碼. 在良好的代碼設計中, 通常應該考慮消除重複代碼. 藉助裝飾器模式, 我們可以消除在每一個待擴展類上重複編寫擴展功能代碼.

2. 裝飾器模式適用場景

對功能擴展使用類似可拔插的接口設計, 可以自由組裝多個擴展類以生成一個自定義的多功能類.

3. 代碼

public Interface Base{
	public void run(){
	}
}
public class Fun implements Base{
	public void run(){
	}
}
public class DecoratorA implements Base{
	private Base base;
	public DecoratorA(Base base){
		this.base = base;
	}
	public void run(){
		//擴展功能
	}
}
public class DecoratorB implements Base{
	private Base base;
	public DecoratorB(Base base){
		this.base = base;
	}
	public void run(){
		//功能擴展
	}
}
public class DecoratorC implements Base{
	private Base base;
	public DecoratorC(Base base){
		this.base = base;
	}
	public void run(){
	}
}
public class Main{
	public void main(String[] args){
		Base b = new Fun();
		Base decorator = new DecoratorA(new DecoratorB(new DecoratorC(b)));
		decorator.run();
	}
}

4.總結

  1. 相對於通過繼承實現功能擴展, 裝飾器模式提供了更大的靈活性與擴展功能複用性
  2. 組裝不是裝飾器時應考慮不同組裝順序可能導致的最終功能差異
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章