裝飾模式(Decorator)

2021-09-01 18:09:03 字數 1739 閱讀 5915

定義

動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案。

能夠解決什麼問題

已經開發完畢的物件,後期由於業務需要,對舊的物件需要擴充套件特別多的功能,這時候使用給物件動態地新增新的狀態或者行為(即裝飾模式)方法,而不是使用子類靜態繼承。

優點

把類中的裝飾功能從類中搬移出去,這樣可以簡化原有的類。有效地把類的核心功能和裝飾功能區分開了

模式結構

component: 定義了乙個物件介面,可以給這些物件動態地新增職責

concretecomponent:定義了乙個具體的物件,可以給這個具體的物件新增職責(需要被裝飾的物件)

decorator:抽象裝飾類,繼承了component物件介面,從外類擴充套件component類的功能,但對於component來說,是無需知道decorator的存在

concretedecoratora:具體的裝飾物件,起到給component新增職責的功能

concretedecoratorb:具體的裝飾物件,起到給component新增職責的功能

源**

public inte***ce component

public class concretecomponent implements component 

}

/**

* 裝飾基類

* *

*/public abstract class decorator implements component

public decorator(component component)

@override

public void operator()

public component getcomponent()

public void setcomponent(component component)

}

public class concretedecoratora extends decorator 

/*** 構造器的繼承,子類始終呼叫父類的預設建構函式

* @param component

*/public concretedecoratora(component component)

@override

public void operator()

public void add_a()

}

public class concretedecoratorb extends decorator

public concretedecoratorb(component component)

@override

public void operator()

public void add_b()

}

public class client 

}

裝飾模式 Decorator

裝飾模式 decorator 動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活。其中component定義了乙個物件介面,可以給這些物件動態的新增職責 concretecomponent是定義了乙個具體的物件,也可以給這個物件新增一些職責 decorator裝飾抽象類,...

Decorator 裝飾模式

定義 動態的給乙個物件新增一些輔助功能,而不改變原有的類。案例 假如現在有個文字控制項textview,它可以在螢幕上顯示文字,但當文字過多的時候,乙個螢幕顯示不下,這時就需要給它新增乙個滾動條。給乙個視窗加乙個滾動條不是原有的功能,而是額外的功能,比如還可以加乙個黑色外框,而且這些操作不是為某乙個...

裝飾模式 Decorator

裝飾模式 decorator 1.裝飾模式 decorator 的定義 又名包裝 模式,裝飾模式以對客戶端透明的方式擴充套件物件的功能,是繼承關係的乙個替代方案。2.裝飾模式以對客戶端透明的方式動態的給乙個物件附加上更多的責任。換言之客戶端並不會覺的物件在裝飾前和裝飾後有什麼區別。3.裝飾模式可以在...