生成器模式(建造者模式)-分離構建和表示

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源代碼中一般與工廠模式結合使用!

相關文章
相關標籤/搜索