建造者模式

发布时间 2023-11-21 08:11:16作者: YE-

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

  1. 画出对应的类图;
2.	提交源代码;
3.	#include<iostream>
4.	#include<string>
5.	using namespace std;
6.	class Computer{
7.	private:
8.	    string CPU;
9.	    string RAM;
10.	    string Hard;
11.	    string Host;
12.	public:
13.	    string getCPU(){
14.	        return CPU;
15.	    }
16.	    string getRAM(){
17.	        return RAM;
18.	    }
19.	    string getHard(){
20.	        return Hard;
21.	    }
22.	    string getHost(){
23.	        return Host;
24.	    }
25.	    void setCPU(string cpu){
26.	        CPU=cpu;
27.	    }
28.	    void setRAM(string ram){
29.	        RAM=ram;
30.	    }
31.	    void setHard(string hard){
32.	        Hard=hard;
33.	    }
34.	    void setHost(string host){
35.	        Host=host;
36.	    }
37.	};
38.	//抽象建造者类——ComputerBuilder类
39.	class ComputerBuilder{
40.	protected:
41.	    Computer computer;
42.	public:
43.	    virtual void buildCPU()=0;
44.	    virtual void buildRAM()=0;
45.	    virtual void buildHard()=0;
46.	    virtual void buildHost()=0;
47.	    Computer getComputer(){
48.	        return computer;
49.	    }
50.	};
51.	//具体建造者类——LaptopComputerBuilder类
52.	class LaptopComputerBuilder:public ComputerBuilder{
53.	public:
54.	    void buildCPU() {
55.	        computer.setCPU("安装笔记本CPU");
56.	    }
57.	    void buildRAM() {
58.	        computer.setRAM("安装笔记本内存");
59.	    }
60.	    void buildHard() {
61.	        computer.setHard("安装笔记本硬盘");
62.	    }
63.	    void buildHost() {
64.	        computer.setHost("安装笔记本主机");
65.	    }
66.	};
67.	//具体建造者类——DesktopComputerBuilder类
68.	class DesktopComputerBuilder:public ComputerBuilder{
69.	public:
70.	    void buildCPU() {
71.	        computer.setCPU("安装台式机CPU");
72.	    }
73.	    void buildRAM() {
74.	        computer.setRAM("安装台式机内存");
75.	    }
76.	    void buildHard() {
77.	        computer.setHard("安装台式机硬盘");
78.	    }
79.	    void buildHost() {
80.	        computer.setHost("安装台式机主机");
81.	    }
82.	};
83.	//指挥者类——Director类
84.	class Director{
85.	private:
86.	    ComputerBuilder* cb;
87.	public:
88.	    void setComputerBuilder(ComputerBuilder *c){
89.	        cb=c;
90.	    }
91.	    Computer construct(){
92.	        cb->buildCPU();
93.	        cb->buildRAM();
94.	        cb->buildHard();
95.	        cb->buildHost();
96.	        return cb->getComputer();
97.	    }
98.	};
99.	//测试类
100.	int main(){
101.	    ComputerBuilder* cb=NULL;
102.	    int i;
103.	    cout<<"请选择:1.笔记本 2、台式机"<<endl;
104.	    cin>>i;
105.	    if(i==1){
106.	        cb=new LaptopComputerBuilder();
107.	    }else if(i==2){
108.	        cb=new DesktopComputerBuilder();
109.	    }else{
110.	        cout<<"输入无效!";
111.	    }
112.	    Director* dir=new Director();
113.	    dir->setComputerBuilder(cb);
114.	    Computer computer=dir->construct();
115.	    cout<<"计算机组成:"<<endl;
116.	    cout<<computer.getCPU()<<endl;
117.	    cout<<computer.getRAM()<<endl;
118.	    cout<<computer.getHard()<<endl;
119.	    cout<<computer.getHost()<<endl;
120.	    delete cb;
121.	    delete dir;
122.	    return 0;
123.	}