设计模式之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的的具体builder
package 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");}}

原创粉丝点击