问题描述:
使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起构成计算机,计算机的类型可以是笔记本,也可以是台式机。
类图:

C++源代码:
#include<iostream>
#include<string>
using namespace std;
//产品类——Computer类
class Computer{
private:
string CPU;
string RAM;
string Hard;
string Host;
public:
string getCPU(){
return CPU;
}
string getRAM(){
return RAM;
}
string getHard(){
return Hard;
}
string getHost(){
return Host;
}
void setCPU(string cpu){
CPU=cpu;
}
void setRAM(string ram){
RAM=ram;
}
void setHard(string hard){
Hard=hard;
}
void setHost(string host){
Host=host;
}
};
//抽象建造者类——ComputerBuilder类
class ComputerBuilder{
protected:
Computer computer;
public:
virtual void buildCPU()=0;
virtual void buildRAM()=0;
virtual void buildHard()=0;
virtual void buildHost()=0;
Computer getComputer(){
return computer;
}
};
//具体建造者类——LaptopComputerBuilder类
class LaptopComputerBuilder:public ComputerBuilder{
public:
void buildCPU() {
computer.setCPU("安装笔记本CPU");
}
void buildRAM() {
computer.setRAM("安装笔记本内存");
}
void buildHard() {
computer.setHard("安装笔记本硬盘");
}
void buildHost() {
computer.setHost("安装笔记本主机");
}
};
//具体建造者类——DesktopComputerBuilder类
class DesktopComputerBuilder:public ComputerBuilder{
public:
void buildCPU() {
computer.setCPU("安装台式机CPU");
}
void buildRAM() {
computer.setRAM("安装台式机内存");
}
void buildHard() {
computer.setHard("安装台式机硬盘");
}
void buildHost() {
computer.setHost("安装台式机主机");
}
};
//指挥者类——Director类
class Director{
private:
ComputerBuilder* cb;
public:
void setComputerBuilder(ComputerBuilder *c){
cb=c;
}
Computer construct(){
cb->buildCPU();
cb->buildRAM();
cb->buildHard();
cb->buildHost();
return cb->getComputer();
}
};
//测试类
int main(){
ComputerBuilder* cb=NULL;
int i;
cout<<"请选择:1.笔记本 2、台式机"<<endl;
cin>>i;
if(i==1){
cb=new LaptopComputerBuilder();
}else if(i==2){
cb=new DesktopComputerBuilder();
}else{
cout<<"输入无效!";
}
Director* dir=new Director();
dir->setComputerBuilder(cb);
Computer computer=dir->construct();
cout<<"计算机组成:"<<endl;
cout<<computer.getCPU()<<endl;
cout<<computer.getRAM()<<endl;
cout<<computer.getHard()<<endl;
cout<<computer.getHost()<<endl;
delete cb;
delete dir;
return 0;
}
运行结果:


浙公网安备 33010602011771号