設計模式的 C 實現 裝飾者模式

2021-10-09 08:58:05 字數 2282 閱讀 9143

前文回顧

單例模式(一)

單例模式(二)

觀察者模式

簡單工廠模式

工廠方法模式(一)

工廠方法模式(二)

抽象工廠模式(一)

抽象工廠模式(二)

原型模式

外觀模式

中介者模式

**模式

裝飾者模式的本質和**模式的原理是一樣的,體現了對乙個既有類進行擴充套件是的原則:除非有更好的理由採用繼承的方式(有虛函式需要重新實現、有受保護成員需要訪問),否則就採用構成的方式進行擴充套件。

裝飾器和原物件都繼承自同乙個基類,對外表現為一樣的介面,但在原有方法的基礎上進行了擴充套件。

場景描述

假設乙個指標雞蛋灌餅的場景:有基礎款、可以加雞蛋、加香腸、加培根等。

抽象基類

using

namespace std;

//雞蛋灌餅抽象介面

class

eggcake

virtual

double

getprice()

=0;virtual

void

showcake()

=0;}

;

實際派生類

#include

"eggcake.h"

//基礎款

class

baseeggcake

:public eggcake

void

showcake

() override

double

getprice

() override

private

:double price;

};

裝飾器基類

#include

"eggcake.h"

//裝飾器

class

decorator

:public eggcake

void

showcake

() override

double

getprice

() override

virtual

~decorator()

protected

: eggcake * cake;

//被裝飾的物件

};

裝飾器派生類

①.加雞蛋

#include

"decorator.h"

class

eggcakeaddegg

:public decorator

double

getprice

() override

~eggcakeaddegg()

};

②.加香腸

#include

"decorator.h"

class

eggcakeaddsausage

:public decorator

double

getprice

() override

~eggcakeaddsausage()

};

③.加培根

#include

"decorator.h"

class

eggcakeaddbacon

:public decorator

double

getprice

() override

~eggcakeaddbacon()

};

客戶端呼叫

設計模式C 實現 裝飾者模式

裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者和被裝飾者有同樣的超累型別。能夠用乙個或多個裝飾者包裝乙個物件。既然裝飾者和被裝飾者物件有同樣的超累型別,所以在不論什麼須要原始物件 被包裝的 的場合,能夠用裝飾過的物件取代它。裝飾者能夠託付被裝飾者的...

設計模式之裝飾者模式C 實現

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...

C 實現設計模式之裝飾者模式詳解

目錄 裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者模式提供了比繼承更有彈性的替代方案。裝飾者模式遵循的設計原則 類應該對擴充套件開放,對修改關閉。裝飾者模式中的類如下圖,c 設計模式之裝飾模式 其中component抽象元件類,即被裝飾的類,每個元件都可以單獨使用,或者被裝飾者包起來...