Java设计形式之Builder模式
Java设计模式之Builder模式
关于Builder模式,网上盛传的例子就是那个buildPartA,buildPartB的程序,很少有其他的例子,看来真是天下文章一大抄!
下面是我自己写的一个例子,贴在这里。
定义一个文件生成器。文件的类:MyFile 分为三个部分,也就是说有三个属性:FileHead,FileContent,FileEnd。
FileHead定义如下:
下面是我自己写的一个例子,贴在这里。
定义一个文件生成器。文件的类:MyFile 分为三个部分,也就是说有三个属性:FileHead,FileContent,FileEnd。
FileHead定义如下:
package create.builder1;
public class FileHead {
private String value;
public class FileHead {
private String value;
public String getValue() {
return value;
}
return value;
}
public void setValue(String value) {
this.value = value;
}
}
this.value = value;
}
}
FileContent定义如下:
package create.builder1;
public class FileContent {
private String value;
public class FileContent {
private String value;
public String getValue() {
return value;
}
return value;
}
public void setValue(String value) {
this.value = value;
}
}
this.value = value;
}
}
FileEnd 定义如下:
package create.builder1;
public class FileEnd {
private String value;
public class FileEnd {
private String value;
public String getValue() {
return value;
}
return value;
}
public void setValue(String value) {
this.value = value;
}
}
this.value = value;
}
}
现在定义MyFile:
package create.builder1;
package create.builder1;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class MyFile {
private FileHead fhead;
private FileHead fhead;
private FileContent fcontent;
private FileEnd fend;
public FileContent getFcontent() {
return fcontent;
}
public FileContent getFcontent() {
return fcontent;
}
public void setFcontent(FileContent fcontent) {
this.fcontent = fcontent;
}
this.fcontent = fcontent;
}
public FileEnd getFend() {
return fend;
}
return fend;
}
public void setFend(FileEnd fend) {
this.fend = fend;
}
this.fend = fend;
}
public FileHead getFhead() {
return fhead;
}
return fhead;
}
public void setFhead(FileHead fhead) {
this.fhead = fhead;
}
public void write(String path) throws IOException{
File f=new File(path);
FileWriter fw=new FileWriter(f);
PrintWriter out=new PrintWriter(fw);
out.println(fhead.getValue());
out.println(fcontent.getValue());
out.println(fend.getValue());
out.close();
}
}
this.fhead = fhead;
}
public void write(String path) throws IOException{
File f=new File(path);
FileWriter fw=new FileWriter(f);
PrintWriter out=new PrintWriter(fw);
out.println(fhead.getValue());
out.println(fcontent.getValue());
out.println(fend.getValue());
out.close();
}
}
定义Builder,我给她取名字为FileBuilder:
package create.builder1;
package create.builder1;
public interface FileBuilder {
void buildHead();
void buildContent();
void buildEnd();
MyFile getResult();
}
该定义Director了,名字为:FileDirector:
package create.builder1;
void buildHead();
void buildContent();
void buildEnd();
MyFile getResult();
}
该定义Director了,名字为:FileDirector:
package create.builder1;
public class FileDirector {
private FileBuilder filebuilder;
public FileDirector(FileBuilder filebuilder){
this.filebuilder=filebuilder;
}
public void construct(){
filebuilder.buildHead();
filebuilder.buildContent();
filebuilder.buildEnd();
}
}
private FileBuilder filebuilder;
public FileDirector(FileBuilder filebuilder){
this.filebuilder=filebuilder;
}
public void construct(){
filebuilder.buildHead();
filebuilder.buildContent();
filebuilder.buildEnd();
}
}
现在到了定义具体Builder的时候了,定义两个,一个是生成txt文件的,一个生成xml文件
TxtBuilder:
package create.builder1;
TxtBuilder:
package create.builder1;
public class TxtBuilder implements FileBuilder{
private FileHead fh=new FileHead();
private FileContent fc=new FileContent();;
private FileEnd fe=new FileEnd();
private FileHead fh=new FileHead();
private FileContent fc=new FileContent();;
private FileEnd fe=new FileEnd();
public void buildHead() {
// TODO Auto-generated method stub
fh.setValue("This is text file");
}
// TODO Auto-generated method stub
fh.setValue("This is text file");
}
public void buildContent() {
// TODO Auto-generated method stub
fc.setValue("this is my content");
}
// TODO Auto-generated method stub
fc.setValue("this is my content");
}
public void buildEnd() {
// TODO Auto-generated method stub
fe.setValue("this is the end of the file");
}
// TODO Auto-generated method stub
fe.setValue("this is the end of the file");
}
public MyFile getResult() {
// TODO Auto-generated method stub
MyFile my=new MyFile();
my.setFcontent(fc);
my.setFhead(fh);
my.setFend(fe);
return my;
}
// TODO Auto-generated method stub
MyFile my=new MyFile();
my.setFcontent(fc);
my.setFhead(fh);
my.setFend(fe);
return my;
}
}
XmlBuilder
package create.builder1;
public class XmlBuilder implements FileBuilder {
private FileHead fh=new FileHead();
private FileContent fc=new FileContent();
private FileEnd fe=new FileEnd();
public void buildHead() {
// TODO Auto-generated method stub
fh.setValue("<?xml version=\"1.0\" encoding=\"GB2312\"?><content>");
}
private FileHead fh=new FileHead();
private FileContent fc=new FileContent();
private FileEnd fe=new FileEnd();
public void buildHead() {
// TODO Auto-generated method stub
fh.setValue("<?xml version=\"1.0\" encoding=\"GB2312\"?><content>");
}
public void buildContent() {
// TODO Auto-generated method stub
fc.setValue("<test>asdasd</test>");
}
// TODO Auto-generated method stub
fc.setValue("<test>asdasd</test>");
}
public void buildEnd() {
// TODO Auto-generated method stub
fe.setValue("</content>");
}
// TODO Auto-generated method stub
fe.setValue("</content>");
}
public MyFile getResult() {
// TODO Auto-generated method stub
MyFile my=new MyFile();
my.setFcontent(fc);
my.setFhead(fh);
my.setFend(fe);
return my;
}
// TODO Auto-generated method stub
MyFile my=new MyFile();
my.setFcontent(fc);
my.setFhead(fh);
my.setFend(fe);
return my;
}
}
Demo如下:
package create.builder1;
Demo如下:
package create.builder1;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileBuilder fb=new TxtBuilder();
FileDirector fd=new FileDirector(fb);
fd.construct();
MyFile my=fb.getResult();
my.write("D:/test.txt");
FileBuilder fbxml=new XmlBuilder();
FileDirector fdxml=new FileDirector(fbxml);
fdxml.construct();
MyFile myxml=fbxml.getResult();
myxml.write("D:/test1.xml");
}
// TODO Auto-generated method stub
FileBuilder fb=new TxtBuilder();
FileDirector fd=new FileDirector(fb);
fd.construct();
MyFile my=fb.getResult();
my.write("D:/test.txt");
FileBuilder fbxml=new XmlBuilder();
FileDirector fdxml=new FileDirector(fbxml);
fdxml.construct();
MyFile myxml=fbxml.getResult();
myxml.write("D:/test1.xml");
}
}
在Demo里可以看到Builder模式的特点。
在Demo里可以看到Builder模式的特点。