1. 應用場景 舉例: 導出數據爲文本格式,xml格式 java
導出步驟分爲: spring
先拼接頭文件信息,再拼接body,再拼接尾部信息,最後導出對應格式! 設計模式
不用設計模式有n 種寫法,這裏不展開說明。。。 ide
咱們如何高效、簡潔、複用地實現這一過程呢? ui
且看咱們利用生成器模式實現。 this
2.生成器模式定義:將一個複雜對象的構建和表示分離,使得一樣一個構建過程能夠建立不一樣的表示。 spa
生成器模式實現以上場景分析: 設計
1)先把構建過程獨立出來,生成器模式中稱之爲指導者,由它來指導構建過程。 code
2)光有指導者不行啊,還須要有具體實現構建的對象,實現這些構建過程的對象叫生成器。 xml
如此,指導者能夠重用構建過程,而生成器能夠切換具體實現。
且看代碼示例
/** * 生成器接口 * @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源代碼中一般與工廠模式結合使用!