实验5:建造者模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解建造者模式的动机,掌握该模式的结构;

2、能够利用建造者模式解决实际问题

 

[实验任务一]:计算机组装

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

实验要求:

1.画出对应的类图;

2.提交源代码;

3.注意编程规范。

 

 

 

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

ublic 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<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 on 2025-01-06 15:32    阅读(11)  评论(0)    收藏  举报