1. 程式人生 > >spring 與設計模式(建立型)之Builder模式

spring 與設計模式(建立型)之Builder模式

一、前言

將一個複雜的物件構建與它的表示分離,使得同樣的構建過程可以建立不同的表示,實現構建物件的過程與部件解耦。生活中許多這樣的例子,例如大學4年的學習,每一年的學習成績會最終影響4後的績點。電腦汽車的裝配等

二、UML


物件的構建:

package com.bitch.design.create.builder;

/**
 * 下面說明如何建立一個整合usb Type-A,Type-B,Type-C介面的電腦
 * @author chenhaipeng
 * @version 1.0
 * @date 2015/10/31 22:35
 */
public interface Builder {

    //Type-A
    void buildPartA();
    //Type-B
    void buildPartB();
    //Type-C
    void buildPartC();

    //返回裝配結果,裝配過程由Director來控制實現
    Product getResult();
}

package com.bitch.design.create.builder;

/**
 * @author chenhaipeng
 * @version 1.0
 * @date 2015/10/31 22:35
 */
public class ConCreateBuilder implements Builder {
    Part partA,partB,partC;

    public ConCreateBuilder() {
        partA = new PartA();
        partB = new PartB();
        partC = new PartC();
    }

    @Override
    public void buildPartA() {
        partA.build();
    }

    @Override
    public void buildPartB() {
        partB.build();
    }

    @Override
    public void buildPartC() {
        partC.build();
    }

    @Override
    public Product getResult() {
        Product product = new ConCreateProduct(partA,partB,partC);
        System.out.println("完成最終成品...............");
        return product;
    }

}

物件表示:
package com.bitch.design.create.builder;

/**
 * @author chenhaipeng
 * @version 1.0
 * @date 2015/11/01 1:45
 */
public class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    /**
     * 封裝內部細節,組裝過程
     */
    public void construct(){
        System.out.println("裝配開始...........");
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
        System.out.println("裝配完成...........");
    }
}
測試:
package com.bitch.design.create.builder;

import org.junit.Test;

/**
 * @author chenhaipeng
 * @version 1.0
 * @date 2015/11/01 2:09
 */
public class MainTest {
    @Test
    public void builder() {
        //構建與表示控制分離
        //建立構建器
        Builder builder = new ConCreateBuilder();
        //表示控制器
        Director director = new Director(builder);
        director.construct();
        //返回最終成品
        Product product = builder.getResult();



    }
}