合成/彙總複用原則(CARP):
優先使用合成/彙總,而不是使用類繼承。
彙總表示一種弱的”擁有關係”,體現的是A對象可以包含B對象,但B對象不是A對象的一部分。
合成表示一種強的”擁有關係”,體現了嚴格的部分和整體的關係,部分和整體的生命週期一樣。
其好處:優先使用對象的合成/彙總將有助於你保持每個類被封裝,並被集中在單個任務上。這樣類和類繼承層次會保持較小規模,並且不太可能增長為不可控制的龐然大物,而繼承就有可能。
繼承是一種強耦合的結構,父類變,子類就要變。使用繼承時,一定要在是‘is-a’的關係時再考慮使用,而不是任何時候都去使用。
橋接模式(Bridge):將抽象部分與它的實現部分分離,使它們都可以獨立地變化。
實現指的是抽象類別和它的衍生類別用來實現自己的對象。
測試案例:
[code]int main(){ ConerectImplementorA *A = new ConerectImplementorA; ConerectImplementorB *B = new ConerectImplementorB; Abstraction *abs = new Abstraction; abs->setImplementor(A); abs->Operation(); //Output: ConerectImplementorA. Abstraction *abs2 = new Abstraction; abs2->setImplementor(B); abs2->Operation(); //Output: ConerectImplementorB. return 0;}
模式實現
[code]//Implementor類,實作類別class Implementor{public: virtual void Operator(){ }};//具體實作類別Aclass ConerectImplementorA: public Implementor{ virtual void Operator(){ std::cout << "ConerectImplementorA.\n"; } };//具體實作類別Bclass ConerectImplementorB: public Implementor{ virtual void Operator(){ std::cout << "ConerectImplementorB.\n"; }};//抽象類別->橋接Implementor類class Abstraction{protected: Implementor *imp; public: void setImplementor(Implementor *imp){ this->imp = imp; } virtual void Operation(){ imp->Operator(); }};//被提煉的對象class RefinedAbstraction: public Abstraction{ virtual void Operation()override{ imp->Operator(); }};
總結:實現系統可能有多角度分類,每一種分類都有可能變化,那麼就把這種多角度分離出來讓他們獨立變化,減少它們之間的耦合。
以上就是C++設計模式淺識橋接模式的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!