10.29

实验5:建造者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
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());
 
    }
}
复制代码

 

3.注意编程规范。

posted @     阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示