設計模式之建造者模式

hahadelphi發表於2021-09-09

建造器模式與工廠方法類似,不過側重點不同。工廠方法模式主要目的的組裝一個產品,強調產品的初始化和設定。而建造器模式強調的是產品各部件的組裝順序(即方法呼叫的順序)

。也可以不用。
/**
 * 產品介面
 */
public abstract class Product {
    // A 步驟
    abstract public void stepA();
    // B 步驟
    abstract public void stepB();
}

/**
* X 產品
 */
public class ProductX extends Product {
    public void stepA(){}
    public void stepB(){}
    public void doSomething(){}
}

/**
 * Y產品
 */
public class ProductY extends Product {
    public void stepA(){}
    public void stepB(){}
    public void doSomething(){}
}
建造類

有多少個產品,就可以對應多少個建造器實現類。注意兩個建造實現類的setPart方法內的組裝順序不同

/**
 * 建造器介面
 */
public abstract class Builder {
    // 設定產品的不同部分,以獲得不同的產品
    public abstract void setPart();
    // 建造產品
    public abstract Product buildProduct();
}

/**
 * X 建造器
 */
public class ConcreteBuilderX extends Builder {

    private Product product = new ProductX();

    @Override
    public void setPart() {
        product.stepA();
        product.stepB();
    }

    @Override
    public Product buildProduct() {
        return product;
    }
}

/**
 * Y 建造器
 */
public class ConcreteBuilderY extends Builder {

    private Product product = new ProductX();

    @Override
    public void setPart() {
        product.stepB();
        product.stepA();
    }

    @Override
    public Product buildProduct() {
        return product;
    }
}
導演類

導演類的作用是使客戶端不直接面向建造器類,降低系統的耦合性。一個導演類就足夠了,裡面管理著所有的建造器。

/**
 * 導演類
 */
public class Director {
    private Builder builderX = new ConcreteBuilderX();
    private Builder builderY = new ConcreteBuilderY();

    public Product getXProduct() {
        builderX.setPart();
        return (Product) builderX.buildProduct();
    }

    public Product getYProduct() {
        builderY.setPart();
        return (Product) builderY.buildProduct();
    }
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2471/viewspace-2808525/,如需轉載,請註明出處,否則將追究法律責任。

相關文章