1. 应用场景 举例: 导出数据为文本格式,xml格式
导出步骤分为:
先拼接头文件信息,再拼接body,再拼接尾部信息,最后导出对应格式!
不用设计模式有n 种写法,这里不展开说明。。。
我们如何高效、简洁、复用地实现这一过程呢?
且看我们利用生成器模式实现。
2.生成器模式定义:将一个复杂对象的构建和表示分离,使得同样一个构建过程可以创建不同的表示。
生成器模式实现以上场景分析:
1)先把构建过程独立出来,生成器模式中称之为指导者,由它来指导构建过程。
2)光有指导者不行啊,还需要有具体实现构建的对象,实现这些构建过程的对象叫生成器。
如此,指导者可以重用构建过程,而生成器可以切换具体实现。
且看代码示例
/**
* 生成器接口
* @author DengYang
* @since 2016-02-23
*/
public interface Builder {
public void buliderHeader(String header);
public void buliderBody(String body);
public void buliderFooter(String footer);
}
/**
* 文本生成器
* @author DengYang
* @since 2016-02-23
*/
public class TxtBuilder implements Builder {
@Override
public void buliderHeader(String header) {
System.out.println("TXT格式:"+header);
}
@Override
public void buliderBody(String body) {
System.out.println("TXT格式:"+body);
}
@Override
public void buliderFooter(String footer) {
System.out.println("TXT格式:"+footer);
}
}
/**
* XML生成器
* @author DengYang
* @since 2016-02-23
*/
public class XmlBuilder implements Builder {
@Override
public void buliderHeader(String header) {
System.out.println("XML格式:"+header);
}
@Override
public void buliderBody(String body) {
System.out.println("XML格式:"+body);
}
@Override
public void buliderFooter(String footer) {
System.out.println("XML格式:"+footer);
}
}
/**
* 指导者,指导生成器的接口来构建产品对象
*
* @author DengYang
* @since 2016-02-23
*/
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
/**
* 指导生成器构建最终产品对象
*/
public void construct(String header,String body,String footer) {
builder.buliderHeader(header);
builder.buliderBody(body);
builder.buliderFooter(footer);
}
}
public class Client {
public static void main(String[] args) {
String header ="========我是头部信息=======";
String body ="========我是body信息=======";
String footer ="========我是尾部信息=======";
TxtBuilder txtBuilder = new TxtBuilder();
Director director = new Director(txtBuilder);
director.construct(header,body,footer);
XmlBuilder xmlBuilder= new XmlBuilder();
director = new Director(xmlBuilder);
director.construct(header,body,footer);
}
}
使用生成器模式,构建过程是统一的,固定不变的,变化的部分放到生成器中了,只要配置了不同的生成器,那么相同的构建过程,就能构建不同的产品或结果出来!
spring源代码中通常与工厂模式结合使用!