设计模式入门之生成器模式

来源:互联网 发布:蒙特祖玛的宝藏5 mac 编辑:程序博客网 时间:2024/04/29 19:16
//生成器模式:把整体构建算法和部件构造进行分离的设计模式//实例:导出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());}}//这样的话,只要处理过程(算法)是不变的,那么就可以实现多种数据格式导出的扩展//生成器模式使得具体表现具有扩展性,而不用多次编写处理过程,提高了代码重用

0 0