一、合成复用原则
合成复用原则:继承和组合,优先使用组合降低依赖关系。
- 继承中,父类的变化可能会影响到子类的行为
二、例子
这里,不应该是人想开什么车而继承什么车,这样就要再定义一个人的类,而是将车作为人的属性的组合。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class AbstractCar {
public:
virtual void start() = 0;
};
class BMW : public AbstractCar {
public:
void start() override {
cout << "BMW start\n";
}
};
class NISSAN : public AbstractCar {
public:
void start() override {
cout << "NISSAN start\n";
}
};
// 不使用继承来针对具体的类,而是用组合来作为人的一种属性
class Person {
public:
~Person() {
if (_pcar != nullptr) {
delete _pcar;
_pcar = nullptr;
}
}
void setCar(AbstractCar* pcar) {
this->_pcar = pcar;
}
void start() {
_pcar->start();
}
private:
AbstractCar* _pcar;
};
void test() {
Person* p = new Person;
p->setCar(new BMW);
p->start();
delete p;
}
int main() {
test();
return 0;
}