当前位置: 首页 > news >正文

Build生成器模式

设计模式简述

设计模式的核心在于提供了相关问题的解决方案,使得人们可以更加简单方便地复用成功的设计和体系结构

生成器模式(创建型设计模式)

意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

生成器模式适用于:

  • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时

  • 当构造过程必须允许被构造的对象有不同的表示时

具体实例(Java语言)

我们将使用 Builder 模式 编写一个 “文档” 编辑程序。一篇文档应当包含如下结构

● 含有一个标题
● 含有内容(字符串)
● 含有条目项目(列表)

Builder 类中定义了决定文档结构的方法,然后 Director 类使用该方法编写一个具体的文档。

Builder 类是抽象类,它只是声明了抽象方法。它的子类决定了具体编写文档的处理
● MDBuilder 类:使用MD编写文档
● HTMLBuilder 类:使用 HTML 编写文档

1.Builder类

/*** 声明编写文档的方法的抽象类* 1. makeTitle 编写标题 2. makeString 编写普通文本 3. makeTimes 条目 4. close* 完成文档编写的方法*/
public abstract class Builder {public abstract void makeTitle(String title);public abstract void makeString(String str);public abstract void makeH1(String str);public abstract void makeTimes(String[] items);public abstract void close();
}/*** 使用 Builder 类中声明的方法来编写文档*/
class Director {private Builder builder;public Director(Builder builder) {this.builder = builder;}public void construct() {builder.makeTitle("Build Pattern实验");builder.makeH1("实验目的");builder.makeString("利用Build模式,设计并实现一个能够同时扩展标记语言种类和生成文档种类的文档生成器");builder.makeH1("实验内容");builder.makeTimes(new String[]{"利用Build模式,设计并实现一个文档生成器。它支持多种标记语言(比如Markdown、Latex,并可以在未来支持其他标记语言),并能生成多种文档,比如html、pdf等。"});builder.close();}
}

2.MDBuilder

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;/*** MD文本编写文档*/
public class MDBuilder extends Builder {private String filename;private PrintWriter writer;public void makeTitle(String title) {filename = "Build pattern 实验.md";try {writer = new PrintWriter(new FileWriter(filename));} catch (IOException e) {e.printStackTrace();}writer.println("# " + title);}public void makeH1(String str) {writer.println("## " + str);}public void makeString(String str) {writer.println(str);}public void makeTimes(String[] items) {for (int i = 0; i < items.length; i++) {writer.println("* " + items[i]);}}public void close() {writer.close();}public String getResult() {return filename;}
}

3.HTMLBuilder类

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;/*** 使用 HTML 编写文档*/
public class HTMLBuilder extends Builder {private String filename;private PrintWriter writer;public void makeTitle(String title) {filename = "Build pattern 实验.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>");}public void makeH1(String str) {writer.println("<h1>" + str + "</h1>");}public void makeString(String str) {writer.println("<p>" + str + "</p>");}public void makeTimes(String[] items) {writer.println("<ul>");for (int i = 0; i < items.length; i++) {writer.println("<li>" + items[i] + "</li>");}writer.println("</ul>");}public void close() {writer.println("</body></html>");writer.close();}public String getResult() {return filename;}
}

4.Main类

/*** 实际编写文档的是 Builder 类*/
public class Main {public static void main(String[] args) {// MD文档生成MDBuilder textBuilder = new MDBuilder();Director director = new Director(textBuilder);director.construct();String result = textBuilder.getResult();System.out.println(result);// HTML文档生成HTMLBuilder htmlBuilder = new HTMLBuilder();Director director1 = new Director(htmlBuilder);director1.construct();String result1 = htmlBuilder.getResult();System.out.println(result1);}
}


 

http://www.lryc.cn/news/65181.html

相关文章:

  • C++程序设计——常见C++11新特性
  • Rust main 函数返回值类型不能是 String
  • 视频里的音乐怎么转换成mp3格式?
  • CSS3 grid网格布局
  • SPSS如何进行均值比较和T检验之案例实训?
  • Packet Tracer - 配置交换机端口安全
  • 一图看懂 aiohttp 模块:基于 asyncio 的异步HTTP网络库, 资料整理+笔记(大全)
  • Linux + 香橙派 + V4L2 + http 实现远程监控摄像头在网页端显示
  • 《编码——隐匿在计算机软硬件背后的语言》精炼——第15-16章(十六进制,RAM)
  • leetcode.1376 通知所有员工所需的时间 - bfs/dfs + 树
  • AtCoder Beginner Contest 300——A-G题讲解
  • Go:值与指针
  • 【Linux】进程学习(2)---理解进程操作
  • 基于springcloud实现的医院信息系统
  • 设计模式-创建型模式-(工厂、简单工厂、抽象工厂)
  • JAVA12新特性
  • Nginx 静态文件、反向代理、负载均衡、缓存、SSL/TLS 加密、gzip 压缩 等等
  • Linux设备驱动模型(一)
  • 【Python入门篇】——Python基础语法(标识符与运算符)
  • 扩展 VirtualBox 已分配磁盘的方法
  • 【LeetCode】646. 最长数对链
  • Makefile教程(Makefile的结构)
  • SpringMVC(后)SSM整合
  • 【博弈论】【第一章】博弈论导论
  • keil移植linux(makefile)
  • C++——类和对象(3)
  • itop-3568开发板驱动学习笔记(24)设备树(三)时钟实例分析
  • linux中使用docker部署微服务
  • 操作系统考试复习—第三章 优先级倒置 死锁问题
  • OpenHarmony送显流程分析