设计模式之——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…

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

问&#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类方法的参量很多时候都是…

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…

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

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

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;我再次以问…

vc++64位系统下long的长度为4个字节_Java与系统硬件的亲密接触「伪共享」

作者&#xff1a;码洞来源&#xff1a;https://zhuanlan.zhihu.com/p/32764602在解释【伪共享】这个概念之前&#xff0c;我们先来运行一段代码&#xff0c;小编的电脑上有4个core。这个程序的逻辑是4个线程共享同一个数组读写不同下标的变量。每个线程循环1亿次读写&#xff0…

linux 端口号查看

linux 端口号查看netstat -anp |grep 端口号最后一列是端口号转载于:https://www.cnblogs.com/ditmark/p/7669804.html

pwm波如何控制电机代码_PWM波控制720电机

详细方案四&#xff1a;pwm与720电机控制电机硬件分析什么是电机&#xff1f;电机(俗称"马达")是指依据电磁感应定律实现电能转换或传递的一种电磁装置。它的主要作用是产生驱动转矩&#xff0c;作为用电器或各种机械的动力源。其中本四轴采用的电机是直流电机。直流…

arduino使用oled代码_【惊不?】Arduino改造古董卡西欧计算器为作弊神器

一台朴实无华的计算器&#xff0c;卡西欧牌。看起来和千万学子们所使用的计算器一样&#xff0c;没什么特别的&#xff0c;还带着一些陈旧的使用痕迹。但如果你用磁铁碰一下&#xff1a;咦&#xff0c;简直像打开了探险电影里的神秘机关&#xff0c;右上角的太阳能电池板部分居…

python字符串数组_python将字符串转换成数组的方法

Python这篇文章主要介绍了Python __setattr__、 __getattr__、 __delattr__、__call__用法示例,本文分别对这几个魔法方法做了讲解,需要的朋友可以参考下 ... junjie4882019-11-22 Python这篇文章主要介绍了Python实现list反转的方法,实例总结了关于list的各种较为常见的操作技…

vsc写vue生成基本代码快捷键_基于vue2.X的webpack基本配置,教你手动撸一个webpack4的配置...

webpack说复杂也不复杂。不复杂&#xff0c;核心概念不外乎是entry, output, loader, plugins。webpack4还新增了optimization选项&#xff0c;用于代码分割和打包优化。现在webpack官网文档已经写的挺棒了。而当你真正开始手写一个webpack.config.js的时候&#xff0c;你就会发…

几款效率神器助你走上人生巅峰

一、背景 在我的工作和生活中&#xff0c;我一直都很注重效率工具的使用&#xff0c;这么些年下来也积累好几款很不错&#xff0c;但是又不为大多数人所熟知的软件工具&#xff0c;我用起来得心应手&#xff0c;很不错。那我就像在此给大家做个分享&#xff0c;希望你们都能多多…

macos下载的安装包在哪里_macbook任意降级,为您带来mac os完美降级教程

最近有许多用户反映升级了最新的系统出现了各种奇葩问题&#xff0c;更关键的是&#xff0c;很多常用&#xff08;专业&#xff09;软件不能使用了。因此有许多用户想要降级&#xff0c;现在macdown小编为您带来mac os完美降级教程&#xff0c;有需要的赶紧收藏啦&#xff01;第…

kodi刮削器 中文_教你PLEX插件播放4K不能使用KODI解码导致卡顿的解决办法

文章作者Hao4K用户nothero自从买了这个索尼9500g&#xff0c;三天两头的出问题&#xff0c;而且还经常重启&#xff0c;经常卡顿。大法的画质确实不错&#xff0c;但是这系统稳定性实在是不敢恭维...最近装了一个KODI-PLEX插件&#xff0c;安利安利{:4_96:}&#xff0c;画面实在…

玩下软工项目,第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息...

项目的Github地址&#xff1a;https://github.com/ggrcwxh/LastTime 采用基于git的多人协作开发模式 软件采用mvc设计模式&#xff0c;前端这么艺术的事我不太懂&#xff0c;交给斌豪同学去头疼了。第一轮先实现查询通话记录返回对应号码上一次的通话时间。 真机测试下的效果图…