Gof 裝飾者模式

2021-10-16 17:36:15 字數 2745 閱讀 9796

繼續打卡設計模式

今天來聊一下裝飾者設計模式

先提出這樣乙個實際問題:

咖啡種類/單品咖啡:espresso(義大利濃咖啡)、shortblack、longblack(美式咖啡)、decaf(無因咖啡)

相對應與咖啡的種類。我們還可以新增不同的調料。例如milk,soy,chocolate

這個時候使用者來點不同的咖啡可以選擇性對的新增不同的調料來改善口味

我們首先想到的可能會是橋接模式那種感覺,把抽象和實現分開,繼而建立不同的例項化物件。我們有沒有相關因為現在的實現並不是說簡單的建立物件。在於我們如何靈活的滿足客戶的需求。調料對於咖啡來講是乙個輔助性的。我們舉乙個生活例項,例如糖+水可以是糖水。那麼理解上來講 水和糖水都還是屬於水。當時糖卻不是屬於水,這種概念就是說我們往一種事物中新增另外一種物質卻沒有改變該事物的本質。我們就把這種動態的將新功能附加到物件上。在物件功能擴充套件方面,它比繼承更有彈性。遵循開閉原則,這種模式為裝飾者設計模式。

首先我們要有乙個基類。

/**

* @author: 德鑫

* description:

* @date: 2021/01/14

*/public abstract class drink

public drink setdes(string des)

public float getprice()

public drink setprice(float price)

//計算費用的抽象方法

public abstract float cost();

}

/**

* @author: 德鑫

* description: 這裡簡單理解就是咖啡是屬於飲料

* @date: 2021/01/14

*/public class coffee extends drink

}

現在咖啡類來繼承飲料類,重新裡面的抽象方法

那麼現在就依次來建立出我們需求中的類都繼承coffee這個類

/**

* @author: 德鑫

* description:

* @date: 2021/01/14

*/public class decaf extends coffee

}

/**

* @author: 德鑫

* description:

* @date: 2021/01/14

*/public class espresso extends coffee

}

/**

* @author: 德鑫

* description:

* @date: 2021/01/14

*/public class longblack extends coffee

}

/**

* @author: 德鑫

* description:

* @date: 2021/01/14

*/public class shortblack extends coffee

}

那這是我們說的四種咖啡,裡面都通過構造方法來設定各個類的屬性值

那麼接著我們現在有調料

/**

* @author: 德鑫

* description:

* @date: 2021/01/14

*/public class chocolate extends decorator

}

/**

* @author: 德鑫

* description:

* @date: 2021/01/14

*/public class milk extends decorator

}

/**

* @author: 德鑫

* description:

* @date: 2021/01/14

*/public class soy extends decorator

}

三種調料完畢

現在最關鍵的一部來了,我們的裝飾者模式在這裡起作用了

/**

* @author: 德鑫

* description:

* @date: 2021/01/14

*/public class decorator extends drink

@override

public float cost()

@override

public string getdes()

}

這裡理解裝飾者模式在於結合了抽象與擴充套件改功能的乙個結合

/**

* @author: 德鑫

* description: 客戶端測試

* * 裝飾者模式是動態的將功能附件到物件上。遵守的是開閉原則,在物件擴充套件方面。它比繼承更有彈性

* @date: 2021/01/14

*/public class client

}

多提一句吧,向我們常用的io結構,filterinputstream就是乙個裝飾者

裝飾者模式 GOF的23個之一

裝飾者模式 gof的23個之一 前言 同樣來自 head first 設計模式 不涉及任何商務往來,僅為學習使用,作為參照筆記。裝飾者模式 動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。汗,發布了一天,才發現題目寫錯了。意外 裝飾者模式類圖 與普通繼承相比,執行時...

GOF結構型模式 裝飾模式

小豬逃命 遊戲 乙隻小豬和乙隻灰狼,小豬最多5條命,灰狼每咬到小豬一次,小豬就要少一條命,小豬的任務是要逃過灰狼的追咬到豬欄。在逃的過程中小豬可以吃到三種蘋果,吃 紅蘋果 可以給小豬加上保護罩,吃 綠蘋果 可以加快小豬奔跑速度,吃 黃蘋果 可以使豬趟著水跑。小豬如果吃多種蘋果的話,小豬可以擁有多種蘋...

Gof 訪問者模式

繼續打卡設計模式 今天來聊一下的是訪問者模式 將觀眾分為男人和女人,對歌手進行測評,當看完某個歌手表演後,得到他們對該歌手不同的評價 評價 有不 同的種類,比如 成功 失敗 等 這個問題的關鍵是說對於乙個歌手評價而言它的結果是有兩個資料屬性來共同決定 首先我們分析一下這個問題肯定是需要 男人和女人這...