Builder模式

Builder模式

Builder模式用于组装具有复杂结构的实例。

示例程序

这里使用Builder模式编写文档程序,它包含一个标题,含有几个字符串,含有条目项目。
1、Builder类
Builder类中只定义了决定文档结构的方法,具体是HTML结构的,还是JSON结构的,这些都交个子类处理。

package com.design.pattern7;

public abstract class Builder {
    public abstract void makeTitle(String title);
    public abstract void makeString(String str);
    public abstract void makeItems(String[] items);
    public abstract void close();
}

2、Director类
Director类主要是调用Builder子类处理后的文档结构,向文档结构里增加数据(文本),以此来编写文档。它并不关心Builder具体长什么样,只要知道文档结构即可。

package com.design.pattern7;

public class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }
    public void construct(){
        builder.makeTitle("问候语");
        builder.makeString("从上午到下午");
        builder.makeItems(new String[]{
                "早上好",
                "下午好"
        });
        builder.makeString("晚上");
        builder.makeItems(new String[]{
                "晚上好",
                "晚安",
                "再见"
        });
        builder.close();
    }
}

3、HTMLBuilder类(Builder子类)

package com.design.pattern7;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class HTMLBuider extends Builder{
    private String fileName;
    private PrintWriter writer;
    @Override
    public void makeTitle(String title) {
        fileName = title + ".html";
        try {
            writer = new PrintWriter(new FileWriter(fileName));
        } catch (IOException e) {
            e.printStackTrace();
        }
        writer.println("<html><head><title>"+title+"</title></head><body>");
        //输出标题
        writer.println("<h1>"+title+"</h1>");
    }

    @Override
    public void makeString(String str) {
        writer.println("<p>"+str+"</p>");
    }

    @Override
    public void makeItems(String[] items) {
        writer.println("<ul>");
        for (String str:items) {
            writer.println("<li>"+str+"</li>");
        }
        writer.println("</ul>");
    }

    @Override
    public void close() {
        writer.println("</body></html>");
        writer.close();
    }
    public String getResult(){
        return fileName;
    }
}

4、Main类

package com.design.pattern7;

public class Main {
    public static void main(String[] args) {
        HTMLBuider htmlBuider = new HTMLBuider();
        Director director = new Director(htmlBuider);
        director.construct();
        String result = htmlBuider.getResult();
        System.out.println(result);
    }
}

生成的文档(问候语.html)

<html><head><title>问候语</title></head><body>
<h1>问候语</h1>
<p>从上午到下午</p>
<ul>
<li>早上好</li>
<li>下午好</li>
</ul>
<p>晚上</p>
<ul>
<li>晚上好</li>
<li>晚安</li>
<li>再见</li>
</ul>
</body></html>

Builder模式需要三个元素:
1、Builder(建造者)
负责定义用于生成实例的接口(API)/方法。
2、ConcreteBuilder(具体的建造者)
负责实现Builder定义的方法。
3、Director(监工)
负责使用Builder的方法来生成实例。

因为不知道才能被替换(可替换性)
Director知道Builder类,并调用Builder的方法来编写文档,但是他不知道自己究竟使用的是Builder的哪个子类,只有不知道子类才能替换,不论是将HTMLBuilder还是其他子类的实例传递给Director,它都能正常工作。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值