定義
在不改變原有物件的基礎之上,將功能附加到物件上。提供了比繼承更有彈性的替代方案(擴充套件原有物件功能)
場景
優點
缺點
涉及物件
**實現
飲料抽象類(抽象構件)
/*** 飲料抽象類
* *
* @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()
}
測試類
publicclass
test
}
設計模式之 裝飾者模式
一 裝飾者模式 裝飾者模式又稱為包裝模式。動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自...
設計模式之裝飾者模式
此模式動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案,以一圖一概括。要點1 裝飾者和被裝飾物件有相同的超型別。2 可以用乙個或多個裝飾者包裝乙個物件。3 裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。4 物件可以在任何時候被裝飾,所以可...
設計模式之裝飾者模式
public abstract class beverage 返回當前飲品的 public abstract double cost 為了讓condiment decorator 調料裝飾者 能夠取代beverage,所以將它擴充套件至beverage類 public abstract class ...