建造者模式

一、工廠模式中建立的對象大都是簡單的對象java

  • 複雜的產品類而且擁有不一樣的屬性特色的管理就須要用到建造者模式

二、建造者模式:ide

  • 將一個複雜的對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的標識
  • 用戶只需指定須要建立的類型就獲得它們,至於具體建造的過程和細節就不知道了

提供產品類:ui

public class Product {
    /**
     * 定義一些關於產品的操做
     */
    private String part1;
    private String part2;
    public String getPart1() {
        return part1;
    }
    public void setPart1(String part1) {
        this.part1 = part1;
    }
    public String getPart2() {
        return part2;
    }
    public void setPart2(String part2) {
        this.part2 = part2;
    }
}

提供抽象構建者接口:this

public interface Builder {
    public void buildPart1();
    public void buildPart2();
    public Product retrieveResult();
}
  • 實現抽象構建者接口的具體構建者:
public class ConcreteBuilder implements Builder {

    private Product product = new Product();
    /**
     * 產品零件建造方法1
     */
    @Override
    public void buildPart1() {
        //構建產品的第一個零件
     product.setPart1("編號:9527");
    }
    /**
     * 產品零件建造方法2
     */
    @Override
    public void buildPart2() {
        //構建產品的第二個零件
     product.setPart2("名稱:XXX");
    }
    /**
     * 產品返還方法
     */
    @Override
    public Product retrieveResult() {
        return product;
    }

}

實現指揮者,指揮構建者構建產品:設計

public class Director {
    /**
     * 持有當前須要使用的建造器對象
     */
    private Builder builder;
    /**
     * 構造方法,傳入建造器對象
     * @param builder 建造器對象
     */
    public Director(Builder builder){
        this.builder = builder;
    }
    /**
     * 產品構造方法,負責調用各個零件建造方法
     */
    public void construct(){
        builder.buildPart1();
        builder.buildPart2();
    }
}

客戶端調用:3d

public class Client {
    public static void main(String[]args){
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        director.construct();
        Product product = builder.retrieveResult();
        System.out.println(product.getPart1());
        System.out.println(product.getPart2());
    }
}

三、總體程序分析:code

  • 建立一個符合多個條件的對象,而不是像工廠方法模式建立一個具體的對象
  • 把產品全部的功能和特色都集成到了具體構建者中去實現的,至於指揮者只負責指揮具體構建者生產
  • 建造者模式應用時就是把建立複雜對象與對象是由什麼組成的及如何裝配的徹底分開

四、使用場景對象

  • 一、須要生成的產品對象有複雜的內部結構,每個內部成分自己能夠是對象,也能夠僅僅是一個對象(即產品對象)的一個組成部分
  • 二、須要生成的產品對象的屬性相互依賴
  • 建造模式能夠強制實行一種分步驟進行的建造過程
  • 若是產品對象的一個屬性必須在另外一個屬性被賦值以後才能夠被賦值,使用建造模式是一個很好的設計思想
  • 三、在對象建立過程當中會使用到系統中的其餘一些對象,這些對象在產品對象的建立過程當中不易獲得
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息