9.20
软件设计 石家庄铁道大学信息学院
实验5:建造者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解建造者模式的动机,掌握该模式的结构;
2、能够利用建造者模式解决实际问题。
[实验任务一]:计算机组装
使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起构成计算机,计算机的类型可以是笔记本,也可以是台式机。
实验要求:
- 画出对应的类图;
2.提交源代码;
Computer
public class Computer {
private String cpu;
private String ram;
private String host;
private String harddisk;
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getRam() {
return ram;
}
public void setRam(String ram) {
this.ram = ram;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getHarddisk() {
return harddisk;
}
public void setHarddisk(String harddisk) {
this.harddisk = harddisk;
}
}
ComputerBuilder
public abstract class ComputerBuilder {
private Computer com=new Computer();
public abstract void buildCpu();
public abstract void buildRam();
public abstract void buildHarddisk();
public abstract void buildHost();
public Computer getComputer() {
return com;
}
}
ComputerFactory
public class ComputerFactory {
private ComputerBuilder cb;
public void setComputerBuilder(ComputerBuilder cb) {
this.cb=cb;
}
public Computer construct() {
cb.buildCpu();
cb.buildHarddisk();
cb.buildHost();
cb.buildRam();
return cb.getComputer();
}
}
Desktopbuilder
public class DesktopBuilder {
public void buildCpu() {
System.out.println("台式机cpu");
}
public void buildRam() {
System.out.println("台式机内存");
}
public void buildHarddisk() {
System.out.println("台式机硬盘");
}
public void buildHost() {
System.out.println("台式机主机");
}
}
NoteBookBuilder
public class NoteBookBuilder extends ComputerBuilder{
public void buildCpu() {
System.out.println("笔记本cpu");
}
public void buildRam() {
System.out.println("笔记本内存");
}
public void buildHarddisk() {
System.out.println("笔记本硬盘");
}
public void buildHost() {
System.out.println("笔记本主机");
}
}
Client
public class Client
{
public static void main(String args[])
{
ComputerBuilder cb=(ComputerBuilder)XMLUtil.getBean();
ComputerFactory cf=new ComputerFactory();
cf.setComputerBuilder(cb);
Computer c=cf.construct();
}
}
include
include
include"tinyxml2.h"
using namespace std;
using namespace tinyxml2;
class Computer{
private: string cpu;
string ram;
string host;
string harddisk;
public: string getCpu() {
return cpu;
}
void setCpu(string cpu) {
this->cpu = cpu;
}
string getRam() {
return ram;
}
void setRam(string ram) {
this->ram = ram;
}
string getHost() {
return host;
}
void setHost(string host) {
this->host = host;
}
string getHarddisk() {
return harddisk;
}
void setHarddisk(string harddisk) {
this->harddisk = harddisk;
}
};
class ComputerBuilder {
private: Computer *com;
public: virtual void buildCpu()=0;
virtual void buildRam()=0;
virtual void buildHarddisk()=0;
virtual void buildHost()=0;
Computer getComputer() {
return *com;
};
ComputerBuilder(){
this->com = new Computer();
};
};
class ComputerFactory {
private: ComputerBuilder *cb;
public:
void setComputerBuilder(ComputerBuilder *cb) {
this->cb = cb;
}
Computer construct() {
cb->buildCpu();
cb->buildHarddisk();
cb->buildHost();
cb->buildRam();
return cb->getComputer();
}
};
class DesktopBuilder :public ComputerBuilder{
public:
void buildCpu() {
cout<<"台式机cpu"<<endl;
}
void buildRam() {
cout<<"台式机内存"<<endl;
}
void buildHarddisk() {
cout<<"台式机硬盘"<<endl;
}
void buildHost() {
cout<<"台式机主机"<<endl;
}
};
class NoteBookBuilder:public ComputerBuilder {
public:
void buildCpu() {
cout << "笔记本cpu" << endl;
}
void buildRam() {
cout << "笔记本内存" << endl;
}
void buildHarddisk() {
cout << "笔记本硬盘" << endl;
}
void buildHost() {
cout << "笔记本主机" << endl;
}
};
int main(){
ComputerBuilder *cm = NULL;
ComputerFactory *cf = new ComputerFactory();
XMLDocument xml;
xml.LoadFile("config.xml");
XMLElement *category = xml.RootElement();
XMLElement *con = category->FirstChildElement("className");
const char* name = con->GetText();
// cout << name << (name == "NoteBook") << (name == "Desktop");
if (strcmp(name,"NoteBook")==0){
cm = new NoteBookBuilder();
//cm = new DesktopBuilder();
}
else if (strcmp(name, "Desktop") == 0){
cm = new DesktopBuilder();
}
cf->setComputerBuilder(cm);
Computer c = cf->construct();
return 0;
}