建造者模式:也叫生成器模式,將一個複雜對象的構建與他的表示分離,使得一樣的構建過程能夠建立不一樣的表示。ide
建造者模式中存在4個角色:ui
product產品類,一般實現了模板方法模式,也就是有模板方法和基本方法。
this
builder抽象建造者,規範產品組建,通常由子類實現。code
ConcreteBuilder具體建造者。實現抽象類定義的全部方法,而且返回一個組建好的對象。對象
Derector導演類,負責安排已有模塊的順序,告訴builder建造。接口
通用代碼:get
public abstract class AbstractProductClass { private List<String> sequence = new ArrayList<String>(); protected abstract void doSomething(); protected abstract void doSomething1(); public void templatething(){ for (int i = 0; i < sequence.size(); i++) { if(sequence.get(i).equals("a")){ doSomething(); }else if(sequence.get(i).equals("b")){ doSomething1(); } } } public void setSequence(List<String> sequence) { this.sequence = sequence; } }
public class ConcretClass1 extends AbstractProductClass{ @Override protected void doSomething() { } @Override protected void doSomething1() { } }
public abstract class Builder { // 設置產品不一樣部分,得到不一樣產品 public abstract void setPart(); //建造產品 public abstract AbstractProductClass buildProduct(); }
public class ConcretBuilder extends Builder { private AbstractProductClass productClass = new ConcretClass1(); @Override public void setPart() { } @Override public AbstractProductClass buildProduct() { return productClass; } }
注意:若是有多個產品類就有幾個建造者,並且着多個產品 類具備相同接口和抽象類。
產品
public class Derector { private Builder builder = new ConcretBuilder(); public AbstractProductClass getProduct(){ // 設置setpart 至關於 setSequence做用。 builder.setPart(); // return builder.buildProduct(); } }
建造者模式和工廠模式很是類似,區別:建造者模式的主要功能:調用順序的安排,通俗的將就是零件的裝配,順序不一樣產生的對象也不一樣,工廠模式注重建立,建立零件是他的主要職責。模板