Builder模式的定義是:將一個複雜物件的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。
首先它意圖是要構建一個複雜的對像,而這個複雜的對像往往需要由好幾個子對像或分步聚來完成最終的這個對象的構建,而這個複雜物件的子對像經常需要不斷的變化,但它的構建過程是相對是穩定的。
比如:一部汽車:它由發動機,輪胎、底盤,車身組成。而此時無論我最終構建的汽車是福士牌的汽車還是奧迪汽車,它的構建過程是不會變的,都是由發動機,輪胎、底盤,車身組成。至於福士牌的汽車還是奧迪汽車它們各自採用的是什麼樣的發動機,輪胎、地盤這些肯定是不一樣的,也就是經常變化的。
通過對上面的分析,我們能夠得出其下代碼:
1 public abstract class BuilderCar
2 {
3 public abstract void Engine();//發動機
4 public abstract void Chassis();//底盤
5 public abstract void Carbody();//車身
6 public abstract void Tire();//輪胎
7
8
9 public abstract Car GetCar();//最終構建出來的汽車
10
11 }
12
13 public abstract class Car {}
14
接下來就是我們的邏輯代碼了 1 public class ClentBLL
2 {
3 private BuilderCar buildercar=null;
4 public ClentBLL(BuilderCar buildercar)
5 {
6 this.buildercar = buildercar;
7 }
8
9 public Car BuilderCar()
10 {
11 buildercar.Carbody();//車身
12 buildercar.Chassis();//底盤
13 buildercar.Engine();//發動機
14 buildercar.Tire();//輪胎
15
16 return buildercar.GetCar();
17 }
現在我們來構建一台奧迪車。
1 //構建一台奧迪汽車
2 public class OOOOCar:Car
3 {
4
5 }
6
7
8 public class OOOOBuilderCar : BuilderCar
9 {
10 public void Engine(){
11 //發動機
12 //在這你隨便弄什麼樣的發動機都可以,。
13 }
14 public void Chassis(){}
15 public void Carbody() { }
16 public void Tire();
17
18
19 public Car GetCar() {
20 //這塊也許會用到上面這些組件方法
21 //做一些其它的事情。
22
23 return new OOOOCar();//產生最終的汽車
24
25 }
調用代碼:
1 public class APP
2 {
3 public static void Main()
4 {
5 ClentBLL cbll = new ClentBLL(new OOOOBuilderCar());//如果想換成其它品牌的車子,只需改動這塊
6 }
7 }
其它不難發現Builder模式與Abstract Factory模式在代碼上有一定的相似性,但是它們解決的問題還有一定的差別的。
Builder模式主要解決"複雜物件各個部分"的頻繁需求變動。
Abstract Factory模式解決“系列對象”的需求變化。
它們相同的地方都是:抽象體內的對象或過程是穩定不變的,至於在項目中使用哪一個,這就要具體分析了。