您好,登錄后才能下訂單哦!
這篇文章主要介紹“C++裝飾模式怎么使用”,在日常操作中,相信很多人在C++裝飾模式怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++裝飾模式怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
C++ 設(shè)計模式 裝飾模式
在結(jié)構(gòu)型模式中裝飾模式給我留下了深刻的印象,其中也感覺到在設(shè)計模式中基本都是
依賴C++的多態(tài)來實(shí)現(xiàn),裝飾模式也不例外,他允許在不改變原有類的代碼的基礎(chǔ)上,
不通過直接繼承原有類的代碼通過一個抽象接口層進(jìn)行實(shí)現(xiàn),甚至可以隨意的組合,
所以這里記錄之以備使用
下面是模型圖:
下面是一個簡單的模擬代碼,模擬本來一個工具只有寫功能,但是我們要不斷的擴(kuò)充其
功能讓它有聽有讀的功能:
這是跑出來的結(jié)果
----source tool----
i can write!!
-----can listen tool-----
i can write!!
i can listene !!
----can read tool------
i can write!!
i can read !!
----can listen and read tool------
i can write!!
i can read !!
i can listene !!
下面是代碼:
#include <iostream>
using namespace std;
/*裝飾模式
*裝飾者模式(Decorator Pattern)動態(tài)的給一個對象添加一些額外的職責(zé)
*/
class ABS_TOOL
{
public:
virtual ~ABS_TOOL(){}
virtual void fun() = 0; //功能接口
};
class write:public ABS_TOOL
{
public:
virtual void fun()
{
cout<<"i can write!!\n";
}
};
class listen:public ABS_TOOL //繼承
{
public:
virtual ~listen(){}
listen(ABS_TOOL* tool) //依賴
{
this->tool = tool;
}
virtual void fun()
{
tool->fun();
cout<<"i can listene !!\n";
}
private:
ABS_TOOL* tool; //聚合
};
class read:public ABS_TOOL //繼承
{
public:
virtual ~read(){}
read(ABS_TOOL* tool) //依賴
{
this->tool = tool;
}
virtual void fun()
{
tool->fun();
cout<<"i can read !!\n";
}
private:
ABS_TOOL* tool; //聚合
};
int main(void)
{
cout<<"----source tool----\n";
write test1;
test1.fun();
cout<<"-----can listen tool-----\n";
listen test2(&test1);
test2.fun();
cout<<"----can read tool------\n";
read test3(&test1);
test3.fun();
cout<<"----can listen and read tool------\n";
listen test4(&test3);
test4.fun();
return 0;
}
到此,關(guān)于“C++裝飾模式怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。