Separate the construction of a complex object from its representation so that the same construction process can create different representations.(將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。)設計模式
引用《設計模式之禪》中的類圖:ui
其中:設計
封裝各個產品的生成邏輯,上層業務只關心須要獲取哪一個產品。3d
對於一類對象,對一個行爲的區別咱們使用成員變量區分更方便,這意味着咱們將某一個行爲抽象到了成員變量上面,成員變量不一樣,致使的產品特徵也不一樣。這個時候用建造者模式來獲取這些具體的對象更方便。這時候咱們能夠將設置成員變量和獲取對象兩個行爲抽象到建造者對象的方法中,其中建造者產出的是一類對象,這一類對象僅僅是成員變量的不一樣,那麼導演類的職責就是爲場景方提供確切的對象,只關注構建的過程,上層場景只關注獲取某一個確切的類。當咱們須要某一個特殊的產品時僅僅經過導演類去調用建造者的設置變量的方法(setPart()方法)和獲取對象的方法(build()方法)就能獲得想要的對象對象
我的理解是,工廠模式裏面的工廠關注的是直接實例化某類對象獲得產品,但對於建造者模式裏面的建造者而言,建造者並不直接返回產品,建造者只是提供建造方法(關注的是setPart方法-設置成員變量,product方法-產出設置後的產品)去獲取產品,真正獲取產品是由導演類獲取,經過同一個建造者,兩種應用場景的區別是咱們須要獲取的產品對應的JAVA類,是不是依賴成員變量不一樣來維護一種需求上的變化。blog