設計模式之裝飾者模式

2022-07-24 08:45:13 字數 2419 閱讀 6330

定義

在不改變原有物件的基礎之上,將功能附加到物件上。提供了比繼承更有彈性的替代方案(擴充套件原有物件功能)

場景

優點

缺點

涉及物件

**實現

飲料抽象類(抽象構件)

/**

* 飲料抽象類

* *

* @date 2020/4/26 14:20 */

public

abstract

class

beverageabstract

/*** cost方法是用來返回飲料的價錢(需在具體類中自己實現)**

@return

*/public

abstract

bigdecimal cost();

}

具體飲料(具體構件也就是具體被裝飾類)

/**

* 深焙咖啡類(一種具體的飲料)

* *

@author

* @date 2020/4/26 14:21 */

public

class darkroast extends

beverageabstract

/*** 實現cost方法,用來返回darkroast(深焙咖啡)的****

@return

*/@override

public

bigdecimal cost()

}/**

* 低咖啡因咖啡類(一種具體的飲料)

* *

@author

* @date 2020/4/26 14:24 */

public

class decaf extends

beverageabstract

/*** 實現cost方法,用來返回decaf(低咖啡因咖啡)的****

@return

*/@override

public

bigdecimal cost()

}

調料抽象類(抽象裝飾類)

/**

* 調料抽象類

* *

@author

* @date 2020/4/26 14:28 */

public

abstract

class condimentdecoratorabstract extends

beverageabstract

調料具體類(具體裝飾類)

/**

* 摩卡調料

* *

@author

* @date 2020/4/26 15:09 */

public

class mocha extends

condimentdecoratorabstract

/*** 在原來飲料的基礎上新增上mocha描述(原來的飲料加入mocha調料,被mocha調料裝飾)**

@return

*/@override

public

string getdescription()

/*** 在原來飲料的基礎上加上mocha的**(原來的飲料加入mocha調料,被mocha調料裝飾)**

@return

*/@override

public

bigdecimal cost()

}/**

* 豆漿調料

* *

@author

* @date 2020/4/26 15:13 */

public

class soy extends

condimentdecoratorabstract

/*** 在原來飲料的基礎上新增上soy描述(原來的飲料加入soy調料,被soy調料裝飾)**

@return

*/@override

public

string getdescription()

/*** 在原來飲料的基礎上加上soy的**(原來的飲料加入soy調料,被soy調料裝飾)**

@return

*/@override

public

bigdecimal cost()

}

測試類

public

class

test

}

設計模式之 裝飾者模式

一 裝飾者模式 裝飾者模式又稱為包裝模式。動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自...

設計模式之裝飾者模式

此模式動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案,以一圖一概括。要點1 裝飾者和被裝飾物件有相同的超型別。2 可以用乙個或多個裝飾者包裝乙個物件。3 裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。4 物件可以在任何時候被裝飾,所以可...

設計模式之裝飾者模式

public abstract class beverage 返回當前飲品的 public abstract double cost 為了讓condiment decorator 調料裝飾者 能夠取代beverage,所以將它擴充套件至beverage類 public abstract class ...