合成/聚合复用原则(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)!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号