欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

C++设计模式浅识桥接模式

程序员文章站 2022-05-24 12:23:49
...
合成/聚合复用原则(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)!