當我們經常去一家麪館吃飯的時候,比如我經常去的三鮮麪館,我們會覺得有時候幹拌臊子面好吃
而有時候又不好吃,這是爲什麼?
不是因爲我們吃膩了,而是因爲他製作面對過程完全是依賴於廚師的,廚師心情好的時候就給你弄好吃點
廚師心情不好了,面自然也就不好吃了。
而麥當勞和肯德基之所以成功,就是因爲他們在製作的過程中,不依賴於任何個人,而是依賴於配方,生產線。
當我們構造一個複雜的對象時候,我們一定要抽線出來一個接口或者抽象類去制定流程。不然就像讓你做一個複雜的菜,鬧不好就會忘了放鹽或者味精。
而有了流程之後,你不去按着流程來,編譯是要報錯的。
所以說:構造者模式是在當創建複雜對象的算法,應該獨立於該對象的組成部分以及他們的裝配方式時適用的模式
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();
}
}