10.29
实验5:建造者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解建造者模式的动机,掌握该模式的结构;
2、能够利用建造者模式解决实际问题。
[实验任务一]:计算机组装
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解建造者模式的动机,掌握该模式的结构;
2、能够利用建造者模式解决实际问题。
[实验任务一]:计算机组装
使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起构成计算机,计算机的类型可以是笔记本,也可以是台式机。
实验要求:1. 画出对应的类图;
2. 提交源代码
//建造者类
import BuilderPattern.complexProduct.Computer;
public abstract class ComputerBuilder { protected Computer computer = new Computer(); public abstract void buildCPUs();//CPU public abstract void buildmonitor();//显示器 public abstract void buildhardwareEquipment();//笔记本使用自己独自的一套硬件设备 public Computer getComputer(){ return computer; } }
//复合产品类
public class Computer { private String CPUs;//CPU private String monitor;//显示器 private String hardwareEquipment;//笔记本使用自己独自的一套硬件设备 public String getCPUs() { return CPUs; } public void setCPUs(String CPUs) { this.CPUs = CPUs; } public String getMonitor() { return monitor; } public void setMonitor(String monitor) { this.monitor = monitor; } public String getHardwareEquipment() { return hardwareEquipment; } public void setHardwareEquipment(String hardwareEquipment) { this.hardwareEquipment = hardwareEquipment; } }
import BuilderPattern.abstractBuilder.ComputerBuilder; public class Desktop extends ComputerBuilder { public void buildCPUs(){ computer.setCPUs("CPU 内存 硬盘 主机 "); } public void buildmonitor(){ computer.setMonitor("显示器 "); } public void buildhardwareEquipment(){ computer.setHardwareEquipment("null"); } }
import BuilderPattern.abstractBuilder.ComputerBuilder; public class NoteBook extends ComputerBuilder { public void buildCPUs(){ computer.setCPUs("null "); } public void buildmonitor(){ computer.setMonitor("null "); } public void buildhardwareEquipment(){ computer.setHardwareEquipment("笔记本使用自己独自的一套硬件设备"); } }
import BuilderPattern.abstractBuilder.ComputerBuilder; public class Server extends ComputerBuilder { public void buildCPUs(){ computer.setCPUs("CPU 内存 硬盘 主机 "); } public void buildmonitor(){ computer.setMonitor("null "); } public void buildhardwareEquipment(){ computer.setHardwareEquipment("null"); } }
import BuilderPattern.abstractBuilder.ComputerBuilder; import BuilderPattern.complexProduct.Computer; public class ComputerAssembleDirector { private ComputerBuilder cb; public void setCb(ComputerBuilder cb) { this.cb = cb; } public Computer constract(){ cb.buildCPUs(); cb.buildmonitor(); cb.buildhardwareEquipment(); return cb.getComputer(); } } import org.w3c.dom.*; import javax.xml.parsers.*; import org.xml.sax.SAXException; import java.io.*;
public class XMLUtil { public static Object getBean(){ try { //创建文档对象 DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder(); Document doc; doc = builder.parse(new File("src/BuilderPattern/Utils/config.xml")); //获取包含支付方式名称的文本节点 NodeList nl = doc.getElementsByTagName("className"); Node classNode=nl.item(0).getFirstChild(); String cName=classNode.getNodeValue(); //通过类名生成实例对象并将其返回 Class c=Class.forName(cName); Object obj=c.newInstance(); return obj; }catch (Exception e){ e.printStackTrace(); return null; } } } <?xml version="1.0" ?> <config> <className>BuilderPattern.complexBuilder.Desktop</className> </config>
import BuilderPattern.Utils.XMLUtil; import BuilderPattern.abstractBuilder.ComputerBuilder; import BuilderPattern.complexProduct.Computer; import BuilderPattern.conductor.ComputerAssembleDirector; import abstractFactory.abstractFactory.AbstractFactory; public class Client { public static void main(String[] args) { ComputerBuilder cb = (ComputerBuilder) XMLUtil.getBean(); ComputerAssembleDirector cad = new ComputerAssembleDirector(); cad.setCb(cb); Computer computer = cad.constract(); System.out.println("计算机的组成:"); System.out.println(computer.getCPUs()); System.out.println(computer.getMonitor()); System.out.println(computer.getHardwareEquipment()); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统