设计模式-计算机组装(建造者模式)
使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起构成计算机,计算机的类型可以是笔记本,也可以是台式机。
java代码
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(); } }
c++代码
#include<iostream> #include<string> #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; }