设计模式之——Builder建造模式

Builder模式又叫建造模式,是用于组装具有复杂结构的实例的模式。

示例程序是编写一个文档,并且写入到文件中,该文档具有以下结构,含有标题,字符串,一些条目。

  • Builder抽象类,为建造模式的核心
package site.wangxin520.gof.builder;/*** 建造者模式的核心——建造者* 负责定义用于生成实例的API接口* @author wangXgnaw* 在本类中,定义了四个方法,分别是标题,字符串和条目,最后的close()方法则用于生成文件以及关闭相应的流*/
public abstract class Builder {/*** 抽象方法,传入字符串标题,用于生成文件的字符串* @param title*/public abstract void makeTitle(String title);/*** 抽象方法,传入字符串* @param string*/public abstract void makeString(String string);/*** 抽象方法,用于传入一个字符串数组,生成文件中对应的条目* @param items*/public abstract void makeItems(String[] items);/*** 抽象方法,关闭相应的流*/public abstract void close();}
  • Director 监工类,调用builder的方法
package site.wangxin520.gof.builder;/*** 管理者,监工* 负责使用builder角色的接口来生成实例,它并不依赖于具体实现类,而是面对抽象类/父类,或者接口进行操作* @author wangXgnaw* 在本类汇总有一个Builder的属性。* 采用的是多态的方法,父类接口指向子类对象*/
public class Director {private Builder builder;/*** 构造器传入Builder属性的具体实现* @param 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();}}
  • HtmlBuilder 继承了Builder类,实现了相应的方法
package site.wangxin520.gof.builder;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;/*** 生成HTML文件的建造模式,对Builder抽象类的具体实现* @author wangXgnaw**/
public class HtmlBuilder extends Builder{private StringBuilder sb=new StringBuilder();@Overridepublic void makeTitle(String title) {sb.append("<html>").append("<head><title>").append(title).append("</title></head><body>");}@Overridepublic void makeString(String string) {sb.append("<p>").append(string).append("</p>");}@Overridepublic void makeItems(String[] items) {sb.append("<ul>");for (String string : items) {sb.append("<li>").append(string).append("</li>");}sb.append("</ul>");}@Overridepublic void close() {sb.append("</body></html>");FileWriter fw=null;try {fw=new FileWriter(new File("E:/TextBuilder.html"));fw.write(sb.toString());} catch (IOException e) {e.printStackTrace();} finally {if(fw!=null){try {fw.close();} catch (IOException e) {e.printStackTrace();}}}}}
  • TextBuilder同上
package site.wangxin520.gof.builder;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;/*** 生成txt文件的建造模式,对Builder抽象类的具体实现* * @author wangXgnaw**/
public class TextBuilder extends Builder {private StringBuilder sb = new StringBuilder();@Overridepublic void makeTitle(String title) {sb.append("========================================").append("\r\n");sb.append("【" + title + "】").append("\r\n");sb.append("========================================").append("\r\n").append("\r\n");}@Overridepublic void makeString(String string) {sb.append("【.】" + string).append("\r\n").append("\r\n");}@Overridepublic void makeItems(String[] items) {for (String string : items) {sb.append("\t" + string).append("\r\n");}sb.append("\r\n");}@Overridepublic void close() {sb.append("========================================");FileWriter fw = null;try {fw = new FileWriter(new File("E:/TextBuilder.txt"));fw.write(sb.toString());} catch (IOException e) {e.printStackTrace();} finally {if (fw != null) {try {fw.close();} catch (IOException e) {e.printStackTrace();}}}}}
  • Main,测试类
package site.wangxin520.gof.builder;/*** 建造者模式的测试类* @author wangXgnaw**/
public class Main {public static void main(String[] args) {//先构建一个Builder,采用的是TextBuilder的实现类Builder b1=new TextBuilder();//将Builder实例传入到Director中Director director1=new Director(b1);//调用构造方法,生成文档
        director1.construct();//与上同Builder b2=new HtmlBuilder();Director director2=new Director(b2);director2.construct();}}
  • 测试结果:

没有报错,并且成功的在E盘中写入俩文件

image

TextBuilder.txt

image

TextBuilder.html(这里忘记改名字了)

image

转载于:https://www.cnblogs.com/wangxinblog/p/7639504.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571867.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java程序员_Java和Python的区别 好程序员帮大家解读

Java和Python的区别 好程序员今天先来解读Java编程语言的优势&#xff0c;人工智能和大数据火爆一时&#xff0c;随之而来&#xff0c;引起了编程语言的人气暴涨。而Java和Python作为最炙手可热的编程语言从一开始便赢得了众多程序员的青睐。凭借各自强大的性能和优势&#xff…

java 工具类sort_Java 通用排序工具类ListSortUtils

场景&#xff1a;Java 类 需 重新排序&#xff0c;有时升序、有时倒叙&#xff0c;有时是多字段排序代码&#xff1a;package GenericTest;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Collections;import java.uti…

Centos 搭建 NFS

服务端yum -y install nfs-utils rpcbind chkconfig nfs on chkconfig rpcbind on mkdir -p /tmp/share chmod 600 /tmp/share vim /etc/exports /tmp/share 192.168.2.0/24(rw,no_root_squash,no_all_squash,sync) /tmp/share *(rw,no_root_squash,no_all_squash,sync) servic…

门户网站运营方案_网络营销方案涉及的工作内容有哪些

问&#xff1a;在公司从事网络营销推广工作&#xff0c;想问下要撰写网络营销方案&#xff0c;要涉及到哪些层面&#xff0c;工作内容有哪些呢&#xff1f;答&#xff1a;总的来说&#xff0c;网络营销方案涉及到&#xff1a;网站技术&#xff0c;市场营销&#xff0c;网络应用…

用宝塔本地搭建php,Windows系统如何使用宝塔面板一键快速搭建本地服务器环境(LNMP/LAMP)...

宝塔面板宝塔面板类似于wamp&#xff0c;xampp等一键集成环境。但是宝塔面板操作更简单&#xff0c;更新更快。个人建议使用宝塔替代wamp。(LNMP等环境不再赘述&#xff0c;请自行百度。建议使用LNMP环境&#xff0c;即NginxMySQLPHP环境)下载前往宝塔面板官网https://www.bt.c…

C# File类的操作

File类&#xff0c;是一个静态类&#xff0c;主要是来提供一些函数库用的。静态实用类&#xff0c;提供了很多静态的方法&#xff0c;支持对文件的基本操作&#xff0c;包括创建&#xff0c;拷贝&#xff0c;移动&#xff0c;删除和打开一个文件。File类方法的参量很多时候都是…

微信小程序动态点赞php,在微信小程序中如何实现点赞功能

这篇文章主要介绍了微信小程序基于本地缓存实现点赞功能的方法,涉及微信小程序界面布局、事件响应及缓存操作等相关实现技巧,需要的朋友可以参考下本文实例讲述了微信小程序基于本地缓存实现点赞功能的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;wxml中的写法…

lstm需要优化的参数_LSTM的物理结构和一些细节

海晨威&#xff1a;一幅图真正理解LSTM的物理结构​zhuanlan.zhihu.com这个是网上看的最多的图了&#xff0c;但是在理解lstm的应用过程中的时候这个图带来了不少麻烦。展开之后实际的物理结构是这样的&#xff0c;1、2图同颜色的点代表了同一个东西&#xff1b;问题1&#xff…

OLED中的Demura

OLED作为一种电流型发光器件已越来越多地被应用于高性能显示中。由于它自发光的特性&#xff0c;与LCD相比&#xff0c;AMOLED具有高对比度、超轻薄、可弯曲等诸多优点。但是&#xff0c;亮度均匀性和残像仍然是它目前面临的两个主要难题&#xff0c;要解决这两个问题&#xff…

python的编程模式有哪两种_python程序的两种运行方式是什么

python程序的两种运行方式是什么 第一种方式&#xff1a;REPL 所谓REPL即read、eva、print、loop&#xff08;读取、计算、打印、循环&#xff09;&#xff0c;实现REPL运行方式有以下两种&#xff1a; 1、IDLE&#xff08; 集成开发环境或集成开发和学习环境&#xff09;是Pyt…

对Linux命令od -tc -tx1的C语言程序实现myod-优化版

导语 自编od C语言实现版名为myod上个星期有一个初代版&#xff0c;链接- myod原版这星期的课上要求实现myod-系统调用版本&#xff0c;要求如下 1 参考教材第十章内容 2 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能&#xff0c;注意XXX是文件…

python字典求平均值_Python 3.4 – 如何获得字典值的平均值?

好吧,让我们迭代所有字典键并平均项目&#xff1a; avgDict {} for k,v in StudentGrades.iteritems(): # v is the list of grades for student k avgDict[k] sum(v)/ float(len(v)) 现在你可以看到&#xff1a; avgDict Out[5]: {Ivan: 3.106666666666667, Martin: 4.81666…

PHP使用指南,PHP使用指南-cookies部分

php使用指南-cookies部分在这课教程我们将学习怎样利用 PHP 处理cookies,我将试着使事情尽可能简单地去解释cookies的一些实际应用。什么是cookies及作用&#xff1f;cookies是由web服务器产生的并且存在客户端的一些信息。它嵌在html信息中&#xff0c;由服务器端指定&#xf…

python猜数字游戏猜n次_python实践项目四:猜数字游戏

1 #!/usr/bin/python 2 #-*- coding: UTF-8 -*- 3 4 importrandom5 secretNumberrandom.randint(1,20)6 print "Im thinking of a number between 1 and 20." 7 times 08 for i in range(1,7):9 print "Take a guess:" 10 guessint(input())11 if guess

使用Linux记录

更新时间: 2018-12-12 Linux Usage 缘起&#xff1a;最近将系统更换为Linux&#xff0c;虽然之前有用过&#xff0c;但只是当作尝试&#xff0c;未当为主系统&#xff0c;这次下定决心以它为主系统&#xff0c;懒得去纠结使用win的一种不道德感及不爽感&#xff0c;游戏及娱乐与…

使用java实现rfc3161,openssl验证用自签名证书签名的RFC3161时间戳

我使用openssl从rfc 3161 timestampreq生成了一个rfc3161 timestampresp。因此,我使用了自签名CA证书和自签名CA使用以下命令颁发的TSA证书:openssl ts -reply -queryfile request.tsq -signer TSAcert.pem -out response.tsr已创建响应。openssl ts -reply -text -in response…

halcon 旋转_Halcon视觉软件应该如何系统学习?

End 声明&#xff1a;部分内容来源于网络&#xff0c;仅供读者学习、交流之目的。文章版权归原作者所有。如有不妥&#xff0c;请联系删除。

java使用重复的类库,java list 去除 重复值

一&#xff1a;Hastset根据hashcode判断是否重复&#xff0c;数据不会重复Java代码/** List order not maintained **/public static void removeDuplicate(ArrayList arlList){HashSet h new HashSet(arlList);arlList.clear();arlList.addAll(h);}二&#xff1a;通过Hashset…

JavaScript--关于变量提升思考

下面例子仅仅是思考变量提升使用&#xff1a; 在实际开发中并不推荐使用相同名字的变量和函数&#xff01; 1 // 如果变量和函数同名的话&#xff0c;函数优先提升 2 console.log(a); 3 function a() { 4 console.log(aaaaa); 5 } 6 var a 1; 7 console.log(a); 更多简单经典…

C++求复数的角度_【研读.教材分析】“勾股定理”教学——基于单元整体的角度再思考...

(西安市第八十六中学 刘丽丽)学科教学要注重知识的“生长点”和“延伸点”&#xff0c;把课时知识置于学科整体逻辑体系中&#xff0c;关注结构和通法&#xff0c;处理好局部与整体之间的关系。所以在北师大版八年级上册数学第一章《勾股定理》的备课中&#xff0c;我再次以问…