设计模式-计算机组装(建造者模式)

使用建造者模式,完成下述任务:计算机组装工厂可以将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;

 }

 

posted @ 2021-10-08 14:56  好吗,好  阅读(1352)  评论(0)    收藏  举报