設計模式---構造者模式

當我們經常去一家麪館吃飯的時候,比如我經常去的三鮮麪館,我們會覺得有時候幹拌臊子面好吃

而有時候又不好吃,這是爲什麼?

不是因爲我們吃膩了,而是因爲他製作面對過程完全是依賴於廚師的,廚師心情好的時候就給你弄好吃點

廚師心情不好了,面自然也就不好吃了。

而麥當勞和肯德基之所以成功,就是因爲他們在製作的過程中,不依賴於任何個人,而是依賴於配方,生產線。

當我們構造一個複雜的對象時候,我們一定要抽線出來一個接口或者抽象類去制定流程。不然就像讓你做一個複雜的菜,鬧不好就會忘了放鹽或者味精。

而有了流程之後,你不去按着流程來,編譯是要報錯的。


所以說:構造者模式是在當創建複雜對象的算法,應該獨立於該對象的組成部分以及他們的裝配方式時適用的模式

package com.basic.builder;

import java.util.ArrayList;
import java.util.List;

public class Product {
    List parts = new ArrayList();

    public void add(String part) {
        parts.add(part);
    }

    public void show() {
        if (parts != null) {
            for (String part : parts) {
                System.out.println(part);
            }
        }
    }
}




package com.basic.builder;

public abstract class MyBuilder {
    public abstract void buildPartA();

    public abstract void buildPartB();

    public abstract Product getResult();
}




package com.basic.builder;

public class MyBuilderAB extends MyBuilder {

    private Product product = new Product();

    public void buildPartA() {
        product.add("放點醬油~");
    }

    public void buildPartB() {
        product.add("放點醋~");
    }

    public Product getResult() {
        return product;
    }
}




package com.basic.builder;

public class MyBuilderXY extends MyBuilder {
    private Product product = new Product();

    public void buildPartA() {
        product.add("切薯條~");
    }

    public void buildPartB() {
        product.add("油炸兩下~");
    }

    public Product getResult() {
        return product;
    }
}




package com.basic.builder;


public class Director {//用來指揮建造過程
    public void construct(MyBuilder myBuilder) {
        myBuilder.buildPartA();
        myBuilder.buildPartB();

    }
}




package com.basic.builder;

public class Main {
    public static void main(String[] args) {
        Director director = new Director();
        MyBuilder builder1 = new MyBuilderAB();
        MyBuilder builder2 = new MyBuilderXY();

        director.construct(builder1);
        Product product1 = builder1.getResult();
        product1.show();

        System.out.println("-----------------------------");

        director.construct(builder2);
        Product product2 = builder2.getResult();
        product2.show();

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章