設計模式 裝飾者模式

2022-04-01 23:21:19 字數 2735 閱讀 3468

我們先來看乙個快餐店的例子。

快餐店有炒麵、炒飯這些快餐,可以額外附加雞蛋、火腿、培根這些配菜,當然加配菜需要額外加錢,每個配菜的價錢通常不太一樣,那麼計算總價就會顯得比較麻煩。

使用繼承的方式存在的問題:

定義:

​ 指在不改變現有物件結構的情況下,動態地給該物件增加一些職責(即增加其額外功能)的模式。

裝飾(decorator)模式中的角色:

我們使用裝飾者模式對快餐店案例進行改進,體會裝飾者模式的精髓。

類圖如下:

**如下:

/**

* @author wgr

* @create 2021/1/22 -- 13:19

*/public abstract class fastfood

public void setprice(float price)

public string getdesc()

public void setdesc(string desc)

public fastfood(float price, string desc)

public abstract float cost(); //獲取**

好處:

在不影響其他物件的情況下,以動態、透明的方式給單個物件新增職責。

當物件的功能要求可以動態地新增,也可以再動態地撤銷時。

io流中的包裝類使用到了裝飾者模式。bufferedinputstream,bufferedoutputstream,bufferedreader,bufferedwriter。

我們以bufferedwriter舉例來說明,先看看如何使用bufferedwriter

public class demo 

}

使用起來感覺確實像是裝飾者模式,接下來看它們的結構:

小結:

​ bufferedwriter使用裝飾者模式對writer子實現類進行了增強,新增了緩衝區,提高了寫資料的效率。

靜態**和裝飾者模式的區別:

不同點:

設計模式 裝飾者模式

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 角色 定義乙個將要接收附...