• 建造者模式——C++实现


    问题描述:

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

    类图:

    C++源代码:

    #include<iostream>
    #include<string>
    using namespace std;
    //产品类——Computer类
    class Computer{
    private:
    	string CPU;
    	string RAM;
    	string Hard;
    	string Host;
    public:
    	string getCPU(){
    		return CPU;
    	}
    	string getRAM(){
    		return RAM;
    	}
    	string getHard(){
    		return Hard;
    	}
    	string getHost(){
    		return Host;
    	}
    	void setCPU(string cpu){
    		CPU=cpu;
    	}
    	void setRAM(string ram){
    		RAM=ram;
    	}
    	void setHard(string hard){
    		Hard=hard;
    	}
    	void setHost(string host){
    		Host=host;
    	}
    };
    //抽象建造者类——ComputerBuilder类
    class ComputerBuilder{
    protected:
    	Computer computer;
    public:
    	virtual void buildCPU()=0;
    	virtual void buildRAM()=0;
    	virtual void buildHard()=0;
    	virtual void buildHost()=0;
    	Computer getComputer(){
    		return computer;
    	}
    };
    //具体建造者类——LaptopComputerBuilder类
    class LaptopComputerBuilder:public ComputerBuilder{
    public:
        void buildCPU() {
    		computer.setCPU("安装笔记本CPU");
    	}
    	void buildRAM() {
    		computer.setRAM("安装笔记本内存");
    	}
    	void buildHard() {
    		computer.setHard("安装笔记本硬盘");
    	}
    	void buildHost() {
    		computer.setHost("安装笔记本主机");
    	}
    };
    //具体建造者类——DesktopComputerBuilder类
    class DesktopComputerBuilder:public ComputerBuilder{
    public:
        void buildCPU() {
    		computer.setCPU("安装台式机CPU");
    	}
    	void buildRAM() {
    		computer.setRAM("安装台式机内存");
    	}
    	void buildHard() {
    		computer.setHard("安装台式机硬盘");
    	}
    	void buildHost() {
    		computer.setHost("安装台式机主机");
    	}
    };
    //指挥者类——Director类
    class Director{
    private:
    	ComputerBuilder* cb;
    public:
    	void setComputerBuilder(ComputerBuilder *c){
    		cb=c;
    	}
    	Computer construct(){
    		cb->buildCPU();
    		cb->buildRAM();
    		cb->buildHard();
    		cb->buildHost();
    		return cb->getComputer();
    	}
    };
    //测试类
    int main(){
    	ComputerBuilder* cb=NULL;
    	int i;
    	cout<<"请选择:1.笔记本 2、台式机"<<endl;
    	cin>>i;
    	if(i==1){
    		cb=new LaptopComputerBuilder();
    	}else if(i==2){
    		cb=new DesktopComputerBuilder();
    	}else{
    		cout<<"输入无效!";
    	}
    	Director* dir=new Director();
    	dir->setComputerBuilder(cb);
    	Computer computer=dir->construct();
    	cout<<"计算机组成:"<<endl;
    	cout<<computer.getCPU()<<endl;
    	cout<<computer.getRAM()<<endl;
    	cout<<computer.getHard()<<endl;
    	cout<<computer.getHost()<<endl;
    	delete cb;
    	delete dir;
    	return 0;
    }
    

      

    运行结果:

     

  • 相关阅读:
    双端队列
    顺序循环队列
    顺序队列
    Counting Triangles(hd1396)
    蒟蒻之栈模拟递归
    链栈以及顺序栈应用—算数表达式
    栈的简单应用-进制转换
    链栈
    共享栈
    顺序栈
  • 原文地址:https://www.cnblogs.com/znjy/p/14138277.html
Copyright © 2020-2023  润新知