首先來明確一下裝飾模式的定義:
裝飾模式動態地將責任附加到物件上,若要擴充套件功能,裝飾比繼承更有彈性。
1.在裝飾者模式中也用到了繼承,但是繼承是為了讓物件有共同的型別,而不是為了從父類中繼承其行為。
2.在裝飾模式中,超類可以使用介面也可以使用抽象類,如果是在擴充套件現有**時,避免修改**盡量使用現有的定義,在新寫**是可以根據開發人員自己決定。
3.超類是基礎物件類(比如是咖啡,茶,還是冰可樂等)和裝飾類(比如 加糖,加奶等等)的基類。在裝飾類中包含所要裝飾的基礎類物件。
下面是乙個簡單的例子來深刻的理解裝飾模式:
類圖
**如下:
public測試**:abstract
class
picture
public
class
adjustmentpicture : picture
public
override
void
draw()
public
override
void
adjustmentpicure()
}public
class
colorphoto : picture
public
override
void
adjustmentpicure()
}public
class
brightnessadjustmentpicture : adjustmentpicture
public
brightnessadjustmentpicture(picture picture)
: base
(picture)
public
override
void
adjustmentpicure()
public
override
void
draw()
}public
class
contrastadjustmentpicture : adjustmentpicture
public
contrastadjustmentpicture(picture picture)
: base
(picture)
public
override
void
adjustmentpicure()
public
override
void
draw()
}public
class
contrastadjustmentpicture : adjustmentpicture
public
contrastadjustmentpicture(picture picture)
: base
(picture)
public
override
void
adjustmentpicure()
public
override
void
draw()
}public
class
frameadjustmentpicture : adjustmentpicture
public
override
void
adjustmentpicure()
public
override
void
draw()
}public
class
rotateadjustmentpicture : adjustmentpicture
public
rotateadjustmentpicture(picture picture)
: base
(picture)
public
override
void
adjustmentpicure()
public
override
void
draw()
}
static測試結果:void main(string
args)
;pic = new
frameadjustmentpicture(pic);
pic.draw();
}
裝飾模式(Decorate Pattern)
以咖啡選單作為例項 namespace 設計模式.裝飾模式 public abstract double cost 裝飾基類為濃縮咖啡 public class espresso beverage public override double cost 裝飾基類為houseblend咖啡 publi...
Java設計模式 裝飾者模
裝飾者模式,其實不難理解,簡單地說就是裝飾者和被裝飾者擁有共同的超類,裝飾者只是豐富了行為,拓展了功能,而型別是不變的。說起來可能比較抽象,接下來通過乙個簡單的例子來實現乙個裝飾者模式。動態的給乙個物件新增一些額外的職責或者功能,就增加功能來說,裝飾者模式相比生成子類更為靈活。大多數情況下被裝飾者不...
PHP設計模式之裝飾器模式,委託模式,外觀模式
如果已有物件的部分內容或功能發生改變,但是不修改原始物件的結構,也不使用擴充套件類時,可以使用裝飾器模式。class cd public function addtrack track 向cd中新增一首歌 public function gettracklist return output 呼叫時 ...