9.20

软件设计 石家庄铁道大学信息学院

实验5:建造者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解建造者模式的动机,掌握该模式的结构;
2、能够利用建造者模式解决实际问题。

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

  1. 画出对应的类图;

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;

}

posted @ 2024-09-20 13:55  cor0000  阅读(2)  评论(0)    收藏  举报