裝飾器模式是什麼?

2021-10-21 05:59:42 字數 1328 閱讀 6950

咖啡店裡咖啡中可以加不同的配料–摩卡、牛奶、糖、奶泡;不同的飲品加上不同的配料有不同的價錢,怎樣實現呢?

可能你的第一印象會想到使用繼承, 

1. 首先定義乙個咖啡基類 

2. 對於加糖的,加牛奶的,加摩卡的 ,加奶泡的,分別寫乙個子類繼承 

3. 對於加糖,又加奶的寫乙個類,對於對於加糖,又摩卡的寫乙個類,對於對於加糖、又奶泡的寫乙個類,對於加糖,又加奶、摩卡的寫乙個類

說到這裡,你會發現這裡四種配料就要寫十幾種實現類了,那如果我們的配料是二十幾種或者三十幾種呢,那麼使用繼承這種 方式肯定會使我們的子類**,那要怎樣解決你,答案就是使用裝飾者模式

q:為什麼裝飾器模式可以解決此問題呢?

a:因為在基類component的子類中抽象出了裝飾器(decrator)基類,並在這個基類下面新增了多個裝飾子類,就像上文中的(糖、牛奶、奶泡等)這樣呼叫的時候就可以任意組合新增什麼配料了。由此便不需要產生多種組合的子類。

裝飾器模式:實現了動態的給物件新增職能。

其中decrator類就是裝飾類基類,在裝飾類基類的子類中就是用來新增輔料。

例子:原生蛋糕,加奶油以及巧克力的例子。

#ifndef component_h_

#define component_h_

#include //定義乙個原始的抽象類蛋糕,裝飾器的功能是給蛋糕加上各種裝飾,如奶油,巧克力,瓜子仁,花生公尺等

class cake

; std::string name;};

class concretecake :public cake

void showcake();

virtual ~concretecake(){};};

#endif

decorator.**件描述具體的裝飾器的類

#include "component.h"

class cakedecrator :public cake;};

class cakedecratormilk : public cakedecrator

void showcake()

void showcake()

; virtual ~cakedecratorcholate(){};

};

客戶端**:

#include "decrator.h"

int main()

JS中裝飾器到底是什麼?

因主要的技術棧是angular,對於angular採用的裝飾器特別認可,是一種優雅的攔截js的方式。目前decorator仍處於stage 2的階段,不知道能否在es2019 es10 中推出,但乙個提案只要能進入stage 2,就基本會包括在以後的正式標準裡面。有n多文章寫道decorator是e...

「模式」是什麼

模式,顧名思義,就是 模 和 式 廣義上的 模式化 是一種原型方法prototype,它用 模 給出標準 要求,用 式 達成目標 目的。對 模 而言,式 就是 結構方法 得到結構的方法 和結構維持 結構維持的方法 而對 式 來說,模 給出了 式 的作用範圍。所以,模式化是解決具體問題的原型法方案,也...

裝飾器是什麼,有什麼功能,能用在什麼業務場景?

概念 1.裝飾器的實現是由閉包支撐的 2.裝飾器本質上是 個 python 函式,它可以在讓其他函式在不需要做任何 的變動的 前提下增加額外的功能 3.裝飾器的返回值也是 個函式的物件,它經常用於有切面需求的場景,實現路由傳參,flask 的路由傳參依賴於裝飾器,瀏覽器通過 url訪問到裝飾器的路由...