Decorate Pattern 裝飾模式

2022-07-26 09:30:23 字數 2405 閱讀 5485

首先來明確一下裝飾模式的定義:

裝飾模式動態地將責任附加到物件上,若要擴充套件功能,裝飾比繼承更有彈性。

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 呼叫時 ...