本篇來講講裝飾器模式,裝飾器也是比較常見的模式,在j**a的io中廣泛應用。
1、定義
裝飾器模式是動態地將責任附加到物件上。若要擴充套件功能,裝飾器提供了比繼承更有彈性的替代方案。
以上的定義比較拗口,通俗的講裝飾器是對原有的方法的增強,跟後續要講的**模式很像,區別在於**模式是遮蔽了**類,裝飾器模式注重附加額外的功能。
component:乙個介面或者抽象類。
concretecomponent:具體的元件實現類。
decorator:裝飾器,通常是抽象類。每個裝飾器都有乙個元件,是對component的引用。
concretedecoratora:具體的裝飾器的實現類,繼承自裝飾器。
concretedecoratorb:具體的裝飾器的實現類,繼承自裝飾器。
3、案例
首先新建抽象類component
package接著建實現component的子類com.design_pattern.decorator;
public
abstract
class
component
package再新建裝飾類decoratorcom.design_pattern.decorator;
public
class concretecomponent extends
component
}
package實現裝飾類concretedecoratoracom.design_pattern.decorator;
public
abstract
class decorator extends
component
public
void
decoratorshow()
}
package以上就實現了裝飾器模式,試試效果吧com.design_pattern.decorator;
public
class concretedecoratora extends
decorator
@override
void
show()
void
setupdate()
}
4、實踐
裝飾器模式在j**a io類中實現較多,比如在抽象類inputstream,實現的子類有fileinputstream、bytearrayinputstream等,而filterinputstream作為裝飾類,bufferedinputstream就是具體的實現。
inputstream中的read
filterinputstream中的read方法呼叫的是inputstream的read方法
bufferedinputstream中實現的read方法是呼叫fill方法,fill方法中增加了快取功能,最終再呼叫inputstream的read方法
以上就是本篇裝飾器模式的全部內容了。
設計模式 裝飾器模式
裝飾器模式 decorator pattern 允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。public inte ce playe...
設計模式 裝飾器模式
裝飾者模式的應用場景 裝飾者模式 decorator pattern 是指在不改變原有物件的基礎之上,將功能附加到物件上,提供了比繼承更有彈性的替代方案 擴充套件原有物件的功能 屬於結構型模式。裝飾者模式在我們生活中應用也比較多如給煎餅加雞蛋 給蛋糕加上一些水果 給房子裝修等,為物件擴充套件一些額外...
設計模式 裝飾器模式
定義 裝飾模式可以動態的給乙個物件增加一些額外的功能 增強功能 相比於繼承,裝飾模式能對不支援繼承的類進行增強 並且比繼承更靈活,不需要生成大量的子類。角色 實現 public abstract class house public abstract void sleep public class ...