//生成器模式:把整体构建算法和部件构造进行分离的设计模式 //实例:导出txt格式文件和xml格式文件 //前提,txt文件和xml文件有相同的内容格式,分别是头文件,文件体和文件尾 //抽象(使用场景):当多个对象具有相同的过程而有不同的表示时分离 //未使用生成器模式的解决方案 public class ExportToTxt { public void export(ExportHeaderModel ehm,Map<String,Collection<ExportDataModel>> mapData,ExportFooterModel efm) { StringBuffer buffer = new StringBuffer(); buffer.append("文件头"); buffer.append("文件体"); buffer.append("文件尾"); System.out.println(buffer); } } public class ExportToXml { public void export(ExportHeaderModel ehm,Map<String,Collection<ExportDataModel>> mapData,ExportFooterModel efm) { StringBuffer buffer = new StringBuffer(); buffer.append("文件头");//这里抽象表示出了生成过程,而没有给出具体的实现 buffer.append("文件体");//这样即可看出txt和xml文件生成的过程是一样的,只是具体实现不一样 buffer.append("文件尾");//这个时候用生成器模式是合适的,他把逻辑算法部分和具体实现部分分离,松散了耦合 System.out.println(buffer); } } //=================================================================================== //引入生成器模式 public interface Builder { public void buildHeader(ExportHeaderModel ehm); public void buildBody(Map<String,Collection<ExportDataModel>> mapData); public void buildFooter(ExportFooterModel efm); } public class TxtBuilder implements Builder { private StringBuffer buffer = new StringBuffer(); public void buildBody(Map<String,Collection<ExportDataModel>> mapData) { //省略 } public void buildHeader(ExportHeaderModel ehm) { //省略 } public void buildFooter(ExportFooterModel efm) { //省略 } public StringBuffer getResult() { return buffer; } } public class XmlBuilder implements Builder { private StringBuffer buffer = new StringBuffer(); public void buildBody(Map<String,Collection<ExportDataModel>> mapData) { //省略 } public void buildHeader(ExportHeaderModel ehm) { //省略 } public void buildFooter(ExportFooterModel efm) { //省略 } public StringBuffer getResult() { return buffer; } } //指导者,即过程指导者 public class Director { private Builder builder; public Director(Builder builder) { this.builder = builder; } //指导过程 public void construct(ExportHeaderModel ehm,Map<String,Collection<ExportDataModel>> mapData,ExportFooterModel efm) { builder.buildHeader(ehm); builder.buildBody(mapData); builder.buildFooter(efm); } } //客户端调用 public class Client { public static void main(String[] args) { //生成ehm,mapData,efm内容 TxtBuilder txtBuilder = new TxtBuilder(); Director director = new Director(txtBuilder); director.construct(ehm,mapData,efm); System.out.println(txtBuilder.getResult()); XmlBuilder xmlBuilder = new XmlBuilder(); Director director = new Director(xmlBuilder); director.construct(ehm,mapData,efm); System.out.println(xmlBuilder.getResult()); } } //这样的话,只要处理过程(算法)是不变的,那么就可以实现多种数据格式导出的扩展 //生成器模式使得具体表现具有扩展性,而不用多次编写处理过程,提高了代码重用
原文:http://blog.csdn.net/herewjxiang/article/details/24188627