Qt C 設計模式 裝飾模式

2021-09-26 10:09:09 字數 1845 閱讀 5576

奶茶已經是現在年輕人必不可少的「養身」飲料,眾所周知奶茶只是基本產品,可以加入龜苓膏、珍珠、檸檬片、果凍、養樂多等等原材料來形成不同的產品。那麼對於乙個奶茶店來說,每做一杯產品的**該如何確定呢?這肯定是取決於使用材料的不同。

例如一杯純奶茶,成本就是最少的,但是要是一杯燒仙草那麼成本就相對更高。

對於奶茶店來說如果想使用乙個系統來獲取產品的**,那麼就適合使用裝飾者模式。

這裡的產品就是被裝飾者,而材料就是裝飾者。將不同的裝飾者裝飾到被裝飾者上便得到不同的產品。同時每乙個裝飾者也是乙個被裝飾者。

**如下:

#ifndef decoratorpattern_h

#define decoratorpattern_h

#include #include using namespace std;

//基礎抽象類

class product

~product(){}

virtual double cost() = 0;//**

};//純奶茶

class milkteam:public product

~milkteam(){}

double cost()

};//燒仙草

class shaoxiancao:public product

~shaoxiancao(){}

double cost()

};//檸檬養樂多

class ningmengyangleduo:public product

~ningmengyangleduo(){}

double cost()

};//裝飾者抽象類,也要繼承產品的基礎類

class materialdecorator:public product

~materialdecorator(){}

virtual void getname() = 0;

};//裝飾者1——龜苓膏

class guilinggao:public materialdecorator

~guilinggao(){}

void getname()

private:

product *product = nullptr;

};//裝飾者2——檸檬片

class ningmengpian:public materialdecorator

~ningmengpian(){}

void getname()

private:

product *product = nullptr;

};//裝飾者3——養樂多

class yangleduo:public materialdecorator

~yangleduo(){}

void getname()

private:

product *product = nullptr;

};#endif // decoratorpattern_h

main.cpp中呼叫:

product *pmilkteam = new milkteam;//顧客1 點了一杯純奶茶

cout <

product *pshaoxiancao = new shaoxiancao;//顧客2 點了一杯燒仙草

pshaoxiancao = new guilinggao(pshaoxiancao);//燒仙草需要加入龜苓膏

cout <

結果:

設計模式 裝飾模式

裝飾模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。m 超級瑪麗 普通繼承模式實現 a 發鏢 能組合出七種功能 m1 a m4 a b b 變身 m2 b m5 a c c 無敵 m3 c m6 b c m7 a b m m1 a b 組合方法 new m2 m...

設計模式 裝飾模式

剛看了看設計模式,真是費了好多的腦細胞。想著想著就到了食堂。o o哈!正是長身體的時候 大神勿噴 一定要多吃點。於是我打了乙份公尺飯,然後又端著盛公尺飯的盤子買了乙份菜 看著還不是很夠,就又端著這個盤子買了一條最愛吃的魚。裝飾模式!五一要來了。回家轉轉,沒有小外甥的玩具怎麼行。於是我去超市,推著購物...

設計模式 裝飾模式

複習設計模式 裝飾模式 裝飾模式 在不修改已經存在的類的情況下,動態的新增新的功能,實現即插即用,開放關閉原則 public inte ce man public class batman implements man override public void killmonster public ...