設計模式 裝飾器模式

2021-09-27 09:51:28 字數 3338 閱讀 7142

裝飾器模式允許向乙個現有的物件新增新的功能,同時又不改變其結構。可以動態地給乙個物件新增一些額外的功能。

比如要畫乙個矩形、圓形

有各種顏色對圖案進行裝飾

shape介面類:

public

inte***ce

shape

具體實現:

//矩形

public

class

rectangle

implements

shape

}//圓形

public

class

circle

implements

shape

}

裝飾器類(裝飾shape的具體實現類):

public

abstract

class

shapedecorator

implements

shape

//呼叫具體圖案的draw()方法

public

void

draw()

}

具體裝飾類:

public

class

redshapedecorator

extends

shapedecorator

@override

public

void

draw()

private

void

setredborder

(shape decoratedshape)

}

使用:

public

static

void

main

(string[

] args)

結果:

circle with normal border

shape: circle

circle of red border

shape: circle

border color: red

rectangle of red border

shape: rectangle

border color: red

分析:

使用裝飾器模式,當需要增加新的顏色去裝飾圖案的時候,只需要繼承裝飾器類shapedecorator實現乙個新的顏色裝飾器類即可,當需要新的圖案時,也只需要實現shape介面即可,原有的類或介面都不用做任何改變。

比如乙個咖啡店,有各種咖啡種類:義大利濃咖啡、美式咖啡、無因咖啡

有各種調料:milk、chocolate、soy

說明:每個咖啡可以和任意n(大於等於0)種調料組合

要求:在擴充套件新的咖啡種類是,具有良好的擴充套件性

drink類:

public

abstract

class

drink

public

void

setdes

(string des)

public

float

getprice()

public

void

setprice

(float price)

//計算費用的抽象方法

public

abstract

float

cost()

;}

coffee類,各個咖啡共有特性的提取:

public

class

coffee

extends

drink

}

具體咖啡(被裝飾者):

//espresso咖啡

public

class

espresso

extends

coffee

}//longblack咖啡

public

class

longblack

extends

coffee

}//shortblack咖啡

public

class

shortblack

extends

coffee

}

裝飾器:

public

class

decorator

extends

drink

@override

public

float

cost()

@override

public string getdes()

}

調料(裝飾者):

//牛奶

public

class

milk

extends

decorator

}//豆漿

public

class

soyextends

decorator

}//巧克力

public

class

chocolate

extends

decorator

}

使用:

public

static

void

main

(string[

] args)

結果:

費用1=5.0

描述= longblack

order 加入乙份牛奶 費用 =7.0

order 加入乙份牛奶 描述 = 牛奶 2.0 && longblack

order 加入乙份牛奶 加入乙份巧克力 費用 =10.0

order 加入乙份牛奶 加入乙份巧克力 描述 = 巧克力 3.0 && 牛奶 2.0 && longblack

order 加入乙份牛奶 加入2份巧克力 費用 =13.0

order 加入乙份牛奶 加入2份巧克力 描述 = 巧克力 3.0 && 巧克力 3.0 && 牛奶 2.0 && longblack

優點:

缺點:

設計模式 裝飾器模式

裝飾器模式 decorator pattern 允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。public inte ce playe...

設計模式 裝飾器模式

裝飾者模式的應用場景 裝飾者模式 decorator pattern 是指在不改變原有物件的基礎之上,將功能附加到物件上,提供了比繼承更有彈性的替代方案 擴充套件原有物件的功能 屬於結構型模式。裝飾者模式在我們生活中應用也比較多如給煎餅加雞蛋 給蛋糕加上一些水果 給房子裝修等,為物件擴充套件一些額外...

設計模式 裝飾器模式

定義 裝飾模式可以動態的給乙個物件增加一些額外的功能 增強功能 相比於繼承,裝飾模式能對不支援繼承的類進行增強 並且比繼承更靈活,不需要生成大量的子類。角色 實現 public abstract class house public abstract void sleep public class ...