首頁  >  文章  >  後端開發  >  C++設計模式淺識橋接模式

C++設計模式淺識橋接模式

黄舟
黄舟原創
2017-01-17 13:45:271194瀏覽

合成/聚合復用原則(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(){      
    }
};

//具体实现类A
class ConerectImplementorA: public Implementor{
    virtual void Operator(){
        std::cout << "ConerectImplementorA.\n";
    }  
};

//具体实现类B
class 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++設計模式淺識橋接模式的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn