C 設計模式淺識裝飾模式

2021-07-11 22:51:12 字數 1471 閱讀 9866

裝飾模式:動態的給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活。

裝飾模式的四個角色:

元件類:component

具體元件類:coneretecomponent

裝飾類:decorator(從外類來擴充套件component類的功能,但對於component來說是無需知道decorator存在的。)

具體裝飾類:concretedecorator(起到給component新增職責的功能)

在此,以人們穿衣修飾為例實現裝飾模式。

測試用例:

int main()
裝飾模式實現:

//主類

class concreteperson

concreteperson(std::string n):name(n){} //構造方式

virtual

void show()const

};//服飾類(裝飾類主類)

class finery: public concreteperson

void show()const

};//具體服飾類tshirts

class concretetshirts: public finery

};//具體服飾類tshirts

class concretetrouser: public finery

};//具體服飾類tshirts

class concreteshoes: public finery

};//具體服飾類tshirts

class concretesuit: public finery

};//具體服飾類tshirts

class concretehat: public finery

};

總結:

裝飾模式是為已有功能動態地新增更多的功能的一種方式。

應該在什麼時候使用呢?

如果在乙個已有程式中新增的功能僅僅是為了滿足只在某些特定情況下才會執行的特殊行為的需要,若在主類中新增**會增加主類複雜度。這時就需要裝飾模式把每個要裝飾的功能放在單獨的類中,並讓這個類包裝它所要裝飾的物件。

因為,當需要執行特殊行為時,客戶**就可以在執行時根據需要有選擇的按順序地使用裝飾功能包裝物件。

裝飾模式的意思就是你自己的主體類和具體類該怎麼寫就怎麼寫,我想額外地增加特殊功能時,就使用額外的類來增加功能,這樣做比生成子類更加靈活,不需要修改原主體類和具體類的**。

這樣將類中的裝飾功能從主類搬移去除,可以簡化原有的類。有效的把類的核心職責和裝飾功能區分開來,而且可以去除相關類中重複的裝飾邏輯。

C 設計模式淺識單例模式

什麼是單例模式?保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點。dp 讓類的自身負責儲存它的唯一例項,這個類保證沒有其他例項可以被建立,並且此類可以提供乙個訪問該例項的方法。dp 什麼時候需要單例模式?程式只需要乙個方法控制某項功能,不允許建立第二個此功能。比如 銀行使用的取號機。使用單例模...

C 設計模式淺識模板方法模式

模板方法模式 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。適用的乙個時機 當我們要完成在某一細節層次一致的乙個過程或一系列步驟,但其個別步驟在更詳細的層次上的實現可能不同時,我們通常考慮用模板方法模式來處理。模板...

C 設計模式淺識職責鏈模式

職責鏈模式 chainofresponsibility 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。職責鏈的好處 當客戶提交乙個請求時,請求時沿鏈傳遞直至有乙個concretehandler物件負責處...