步步為營之——建造者模式(Builder)

來源:互聯網
上載者:User

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模式解決“系列對象”的需求變化。

它們相同的地方都是:抽象體內的對象或過程是穩定不變的,至於在項目中使用哪一個,這就要具體分析了。 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.