裝飾器模式,主要向乙個已有物件新增新的功能。
可以看做對原有物件進行裝飾,使其功能更加豐富。
下面就畫圖舉個例子。
shape介面
publicinte***ce
shape
rectangle
publicclass rectangle implements
shape
}
circle
publicclass circle implements
shape
}
測試
publicclass
main
}
draw circledraw rectangle
現在我們有了新的要求,畫完圖形的同時我們需要設定下顏色。
這時我們採用裝飾器實現這個功能,在已有物件上新增新功能。
那麼首先我們需要建立乙個抽象的裝飾類,用於裝飾shape,在draw後新增setcolor的功能。
既然是對原有物件的擴充套件,所以我們的抽象裝飾類也需要實現shape介面
publicabstract
class decoratorshape implements
shape
@override
public
void
draw()
}
其中 shape decorator;為被裝飾物件,也就是說為decorator提供額外的功能。
具體功能的實現是通過 decoratorshape 的子類中重寫draw方法來實現的。
這裡建立了乙個 reddecoratorshape 繼承自 decoratorshape,用於為影象設定紅色。
同時draw中通過 decorator呼叫了shape介面中影象原有的draw方法,原有的畫圖方法沒有被改變,
只是在畫圖之後新增了設定顏色的方法 setred。
publicclass reddecoratorshape extends
decoratorshape
@override
public
void
draw()
private
void
setredshape()
}
測試
publicclass
main
}
draw circlecolor : red
draw rectangle
color : red
如果我們現在想影象上既有紅色又有藍色,這時我們只需要在寫乙個bluedecoratorshape,同時使用它裝飾redcircle即可
bluedecoratorshape
publicclass bluedecoratorshape extends
decoratorshape
@override
public
void
draw()
private
void
setredshape()
}
main
publicclass
main
}
執行結果:draw circle
color : red
draw rectangle
color : red
draw circle
color : red
color : blue
draw rectangle
color : red
color : blue
裝飾模式注重在對原有功能的擴充套件增強,後續需要多種顏色還可以繼續裝飾下去。
設計模式 裝飾器模式
裝飾器模式 decorator pattern 允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。public inte ce playe...
設計模式 裝飾器模式
裝飾者模式的應用場景 裝飾者模式 decorator pattern 是指在不改變原有物件的基礎之上,將功能附加到物件上,提供了比繼承更有彈性的替代方案 擴充套件原有物件的功能 屬於結構型模式。裝飾者模式在我們生活中應用也比較多如給煎餅加雞蛋 給蛋糕加上一些水果 給房子裝修等,為物件擴充套件一些額外...
設計模式 裝飾器模式
定義 裝飾模式可以動態的給乙個物件增加一些額外的功能 增強功能 相比於繼承,裝飾模式能對不支援繼承的類進行增強 並且比繼承更靈活,不需要生成大量的子類。角色 實現 public abstract class house public abstract void sleep public class ...