设计模式之Builder模式实例
来源:互联网 发布:反对网络视听通则 编辑:程序博客网 时间:2024/05/29 03:58
这里简单的写一个文件创建器,来说明Builder模式。
首先,整体介绍一下:
这个文件创建器要求能实现创建txt文件和xml文件的功能。采用Builder设计模式。
第二,如果看了上一篇,对于Builder设计模式有了基本的了解,那么就应该知道,我们要创建一个文件MyFile,文件分为三个部分,一个是开头,一个是内容,
一个是结尾。根据Builder设计模式,文件的三个组成部分要放到Builder接口里面,并且从这个接口得到文件。
MyFile的代码:
package Builder;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;public class MyFile {private FileHead head;private FileContent content;private FileEnd end;public FileHead getHead() {return head;}public void setHead(FileHead head) {this.head = head;}public FileContent getContent() {return content;}public void setContent(FileContent content) {this.content = content;}public FileEnd getEnd() {return end;}public void setEnd(FileEnd end) {this.end = end;}public void write(String path) throws IOException {File file = new File(path);FileWriter fw = new FileWriter(file);PrintWriter out = new PrintWriter(fw);out.println(head.getValue());out.println(content.getValue());out.println(end.getValue());//下面这个流如果不关闭,文件里就没有内容。找了半天。out.close();}}
对于文件的三个部分,分别代码如下:package Builder;public class FileHead {private String value = null;public String getValue() {return value;}public void setValue(String value) {this.value = value;}}package Builder;public class FileContent {private String value = null;public String getValue() {return value;}public void setValue(String value) {this.value = value;}}package Builder;public class FileEnd {private String value = null;public String getValue() {return value;}public void setValue(String value) {this.value = value;}}然后创建Builder接口,里面声明了创建这三个部分的方法,以及一个得到文件的方法。package Builder;public interface Builder {void buildHead();void buildContent();void buildEnd();MyFile getResult();}
然后是具体的Builder实现,分别为生成txt和xml的的具体builderpackage Builder;public class TxtBuilder implements Builder {//这里一定要new出来对象,否则下面使用引用的时候会产生空指针异常。private FileHead fileHead = new FileHead();private FileContent fileContent = new FileContent();private FileEnd fileEnd = new FileEnd();@Overridepublic void buildHead() {fileHead.setValue("My txt head.");}@Overridepublic void buildContent() {fileContent.setValue("My txt content.");}@Overridepublic void buildEnd() {fileEnd.setValue("My txt end.");}@Overridepublic MyFile getResult() {MyFile mf = new MyFile();mf.setHead(fileHead);mf.setContent(fileContent);mf.setEnd(fileEnd);return mf;}}package Builder;public class XMLBuilder implements Builder{//这里一定要new出来对象,否则下面使用引用的时候会产生空指针异常。private FileHead fileHead = new FileHead();private FileContent fileContent = new FileContent();private FileEnd fileEnd = new FileEnd();@Overridepublic void buildHead() {fileHead.setValue("<?xml version=\"1.0\" encoding=\"GB2312\"?><content>");}@Overridepublic void buildContent() {fileContent.setValue("<test>asdasd</test>");}@Overridepublic void buildEnd() {fileEnd.setValue("</content>");}@Overridepublic MyFile getResult() {MyFile mf = new MyFile();mf.setHead(fileHead);mf.setContent(fileContent);mf.setEnd(fileEnd);return mf;}}
然后一个Director类,组装起来package Builder;public class Director {private Builder fileBuilder;public Director(Builder fileBuilder) {this.fileBuilder = fileBuilder;}public void construct() {fileBuilder.buildHead();fileBuilder.buildContent();fileBuilder.buildEnd();}}测试代码package Builder;import java.io.IOException;public class Client {/** * @param args * @throws IOException */public static void main(String[] args) throws IOException {//创建txt文件Builder txtBuilder = new TxtBuilder();Director txtDirector = new Director(txtBuilder);txtDirector.construct();MyFile mfTxt = txtBuilder.getResult();mfTxt.write("D:/txt.txt");//创建xml文件Builder XMLBuilder = new XMLBuilder();Director XMLDirector = new Director(XMLBuilder);XMLDirector.construct();MyFile mfXML = XMLBuilder.getResult();mfXML.write("D:/txt.xml");}}
- 设计模式之Builder模式实例
- Net设计模式实例之建造者模式(Builder Pattern)
- 设计模式实例(Lua)笔记之四(Builder 模式)
- Net设计模式实例之建造者模式(Builder Pattern)
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 设计模式之Builder
- 专家视角看IT与架构
- 天龙代码分析
- delphi7 出错 解决方法
- Oracle失效对象自动重新编译
- PreferenceActivity用法简介(一)
- 设计模式之Builder模式实例
- iOS开发知识要点
- PreferenceActivity用法简介(二)
- BotHunter试验
- linux串口调试
- final
- 关于Oracle10.2.0自行启动两个监听进程导致服务中断问题
- 傅盛口述 揭秘与360历史恩怨
- 如何删除SVN及其恢复问题