設計模式 裝飾者模式

2021-09-26 02:06:42 字數 3188 閱讀 2926

平台

位址csdn

個人部落格

裝飾者模式 動態地將責任附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。

首先我們來分析下裝飾者模式中有哪些角色:

朋友開了家暢飲吧,可以喝到不同種類的飲料。現在需要設計一種模型,能夠滿足多種飲料和輔料的新增,盡可能的優雅。

比如說:買一杯咖啡,**是3元,但是要加奶的話,需要加價0.3元,還要根據不同的容量加價,如果是小杯的話1元,中杯2元,大杯3元。

類圖

抽象:定義被裝飾者和裝飾器

/** * 設定容量

* @param capacity

*/public

void

setcapacity

(capacity capacity)

}

public

abstract

class

beveragedecorator

extends

abstractbeverage

/** * 計算**

** @return

*/@override

public

double

cost()

}

裝飾器實現

public

class

milk

extends

beveragedecorator

/** * 定義飲料的描述方法【飲料a:+調料1、+調料2、+選擇不同的杯容量】

** @return

*/@override

public string getdescription()

/** * 計算**

** @return

*/@override

public

double

cost()

}

public

class

capacity

extends

beveragedecorator

/** * 定義飲料的描述方法【飲料a:+調料1、+調料2、+選擇不同的杯容量】

** @return

*/@override

public string getdescription()

@override

public

double

cost()

return

super

.cost()

+ capacitycost;

}}

演示

@test

public

void

testx1()

看下輸出:

coffee

3.0coffee,milk

3.3coffee,milk,middle

5.3coffee,milk,small

4.3

裝飾模式特點

/**

* 計算**

* * @return

*/@override

public

double

cost()

加入我們先加奶,然後中杯換小杯,兩次裝飾的結果依次為

beveragedecorator addmilk =

newmilk

(coffee)

;

beveragedecorator middlecapacity =

newcapacity

(addmilk)

;coffee.

setcapacity

(abstractbeverage.capacity.small)

;

比較下兩次裝飾的**,我們可以發現裝飾模式是裝飾器層層巢狀的一種設計模式,設計的主體就是被裝飾者。

每次計算**的時候先計算傳入的被裝飾物件的**,然後加上自己的**。

為了更形象的理解,我們還可以這樣寫:

beveragedecorator coffee =

newcoffee()

;coffee.

setcapacity

(abstractbeverage.capacity.small)

;coffee =

newmilk

(coffee)

;coffee =

newcapacity

(coffee)

;

設計基礎

物件導向設計原則

優點

《head first》讀書筆記

設計模式 裝飾者模式

public abstract class beverage public abstract double cost public abstract class condimentdecorator extends beverage public class darkroast extends be...

設計模式 裝飾者模式

沒什麼特別的,之前看懂了,這次自己再複述一下。畢竟把別人講懂了才是真的懂了。主要參考了head first 設計模式。例子講述的是在為星巴克咖啡的製作訂單的情況,比如客人點了飲料,那麼系統會自動算出 不知道是我沒有體會到,還是這個例子不太合適,算出 那麼簡單的事還需要用到類?不過不影響我們思考裝飾者...

設計模式 裝飾者模式

好幾天沒出部落格了,在學習android的一些新控制項的時候,用到了乙個模式,叫裝飾者模式,所以在此講講這個模式。模式,包含以下四個角色 1 抽象構件 component 角色 給出乙個抽象介面,以規範準備接收附加責任的物件。2 具體構件 concretecomponent 角色 定義乙個將要接收附...