将抽象部分和实现部分解耦合,使得他们可以独立变化
eg:小汽车 都需要发动机,而发动机又多种多样,即多种多样的车安装各种类型的发动机
本质上是将两个基类组合起来,通过基类控制子类(上例中,汽车的基类将会持有发动机的基类)
#include<iostream>
using namespace std;
class Engine
{
public:
virtual ~Engine()
{
}
virtual void installEngine() = 0;
};
class A_Engine : public Engine
{
public:
virtual ~A_Engine()
{
}
void installEngine()
{
cout << "我是A类型发动机,安装完毕" << endl;
}
};
class B_Engine : public Engine
{
public:
virtual ~B_Engine()
{
}
void installEngine()
{
cout << "我是B类型发动机,安装完毕" << endl;
}
};
class Car
{
public:
virtual ~Car()
{
}
Car(Engine *engine)
{
this->_engine = engine;
}
virtual void installEngine() = 0;
protected:
Engine *_engine = nullptr;
};
class BW : public Car
{
public:
BW(Engine *engine) : Car(engine)
{
}
void installEngine()
{
cout << "我是BW车" << endl;
_engine->installEngine();
}
};
class BC : public Car
{
public:
BC(Engine *engine) : Car(engine)
{
}
void installEngine()
{
cout << "我是BC车" << endl;
_engine->installEngine();
}
};
int main()
{
Car *myCar = nullptr;
Engine *engine = nullptr;
engine = new A_Engine;
myCar = new BW(engine);
myCar->installEngine();
delete myCar;
delete engine;
engine = new B_Engine;
myCar = new BW(engine);
myCar->installEngine();
delete myCar;
delete engine;
engine = new A_Engine;
myCar = new BC(engine);
myCar->installEngine();
delete myCar;
delete engine;
engine = new B_Engine;
myCar = new BC(engine);
myCar->installEngine();
delete myCar;
delete engine;
return 0;
}