1. 程式人生 > >Builder模式——專案中最常見的設計模式之一

Builder模式——專案中最常見的設計模式之一

     Builder模式介紹

        Builder模式是一種一步一步建立一個複雜物件的設計模式,我認為這種設計模式的精髓就主要有兩點:其一,使用者使用簡單,並且可以在不需要知道內部構建細節的情況下,就可以構建出複雜的物件模型;其二,對於設計者來說,這是一個解耦的過程,這種設計模式可以將構建的過程和具體的表示分離開來。

     Builder模式的使用場景

        1.相同的方法,不同的執行順序,產生不同的時間結果時。         2.多個部件或零件,都可以裝配到一個物件中,但是產生的執行結果又不同時。         3.產品類非常複雜,或者產品類中的呼叫順序不同產生了不同的作用,這個時候用建造者模式非常適合。         4.當初始化一個物件特別複雜,如引數多,切很多引數都具有預設值時。

     Builder模式分析

        我們為什麼要把程式碼的構建和表示分離開來?1.增加程式碼的可讀性;2.方便維護。舉一個例子,安卓中非常常用的AlertDialog就是Builder模式,我們知道,一個Dialog可以有非常多的屬性和引數,例如title,icon,message, positiveButton,negativeButton等十幾個引數,如果這些引數都放在建構函式裡,那麼這個方法將會有很多引數,為了完成這個函式,需要一次性準備好所有的引數,很容易寫著寫著就亂了。同時為了適配,還需要寫很多過載的建構函式,類會很亂。而如果使用builder模式,不需要一次性準備好所有的引數,完全可以一個一個準備,程式碼易懂,方便非常多。

     舉例說明

        有一個Person類,有name,age,job,sex等等N多屬性,這裡我用s1,s2,s3...s10代替。
        接下來在Person類的內部定義一個靜態的Builder類,並且定義對應的s1-s10方法,方法返回型別都是Builder         最後,增加一個build()方法,將所有的屬性都設定進去         這樣,含有多個引數的Builder模式的Person類就完成了,接下來我們看看用法。
        程式碼的可讀性高了很多,試想一下如果new了一個Person類,建構函式裡傳了10個引數,看起來就非常頭疼,以後想改某一個值的話,還要去找程式碼看相應的含義。而Builder模式的可讀性就非常高,只需要去修改相應的Builder靜態類中的方法即可。

     總結

        Builder模式與傳統的模式相比,並不是完全勝出的,相比之下,Builder模式的程式碼量會比正常多不少,但是隨之帶來的好處是程式碼的可讀性和可維護性。但是,往往一個好的設計模式或架構,就是在犧牲某一種能力從而大大增強另一種能力,例如,犧牲一定的可讀性,增加專案的可擴充套件性等等這樣的方式。因此,在引數較為複雜,構造物件相對繁瑣的情況下,一定要首先考慮使用Builder模式。