描述:创建一个生成电脑零部件的纯虚函数,让各个厂商品牌去生产这些零部件(也就是具体去实现基类的方法),再通过一个电脑类去实现各个零件的组装,完成一个完整电脑的配置,其中一台电脑的零件可以来自不同厂商。
#include <iostream>
using namespace std;
///抽象类
class Cpu
{
public:
virtual void calculator() = 0;
};
class VideoCard
{
public:
virtual void disPlay() = 0;
};
class Memory
{
public:
virtual void storage() = 0;
};
class Computer
{
public:
Computer(Cpu *cpu,VideoCard *vc,Memory *me){
m_cpu = cpu;
m_vc = vc;
m_me = me;
}
virtual ~Computer(){
cout<<"computer 析构函数"<<endl;
if(m_cpu != nullptr){
delete m_cpu;
m_cpu = nullptr;
}
if(m_vc != nullptr){
delete m_vc;
m_vc = nullptr;
}
if(m_me != nullptr){
delete m_me;
m_me = nullptr;
}
}
void doWork();
private:
Cpu *m_cpu;
VideoCard *m_vc;
Memory *m_me;
};
class InterCpu:public Cpu
{
public:
virtual void calculator(){
cout<<"InterCpu 正在执行数据计算"<<endl;
}
};
class InterVieoCard:public VideoCard
{
public:
void disPlay()
{
cout<<"InterVieoCard 正在显示数据处理"<<endl;
}
};
class InterMemory:public Memory
{
public:
virtual void storage()
{
cout<<"InterMemory 正在存储数据处理"<<endl;
}
};
class LenovoCpu:public Cpu
{
public:
virtual void calculator()
{
cout<<"LenovoCpu 正在执行数据计算"<<endl;
}
};
class LenovoVieoCard:public VideoCard
{
public:
virtual void disPlay()
{
cout<<"LenovoVieoCard 正在显示数据处理"<<endl;
}
};
class LenovoMemory:public Memory
{
public:
virtual void storage(){
cout<<"LenovoMemory 正在存储数据处理"<<endl;
}
};
void Computer::doWork()
{
m_cpu->calculator();
m_vc->disPlay();
m_me->storage();
}
void test()
{
//第一台电脑
cout<<"第一台电脑开始工作"<<endl;
Cpu *cpu = new InterCpu;
VideoCard *vc = new InterVieoCard;
Memory *me = new InterMemory;
Computer *com1 = new Computer(cpu,vc,me);
com1->doWork();
cout<<"---------------------"<<endl;
//第二台电脑
cout<<"第二台电脑开始工作"<<endl;
Computer *com2 = new Computer(new LenovoCpu,new LenovoVieoCard,new LenovoMemory);
com2->doWork();
cout<<"---------------------"<<endl;
cout<<"第三台电脑开始工作"<<endl;
Computer *com3 = new Computer(new LenovoCpu,new InterVieoCard,new InterMemory);
com3->doWork();
delete com1;
delete com2;
delete com3;
}
int main()
{
test();
return 0;
}