1. 程式人生 > >建造者模式(Builder Pattern)- 最易懂的設計模式解析

建造者模式(Builder Pattern)- 最易懂的設計模式解析

前言

今天我來全面總結一下Android開發中最常用的設計模式 -建造者模式。

目錄

建造者模式.jpg

1. 介紹

1.1 定義

將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示

1.2 主要作用

在使用者不知道物件的建造過程和細節的情況下就可以直接建立複雜的物件。

  1. 使用者只需要給出指定複雜物件的型別和內容;
  2. 建造者模式負責按順序建立複雜物件(把內部的建造過程和細節隱藏起來)

1.3 解決的問題

  • 方便使用者建立複雜的物件(不需要知道實現過程)
  • 程式碼複用性 & 封裝性(將物件構建過程和細節進行封裝 & 複用)

例子:造汽車 & 買汽車。
1. 工廠(建造者模式):負責製造汽車(組裝過程和細節在工廠內)
2. 汽車購買者(使用者):你只需要說出你需要的型號(物件的型別和內容),然後直接購買就可以使用了
(不需要知道汽車是怎麼組裝的(車輪、車門、發動機、方向盤等等))

2. 模式原理

2.1 UML類圖 & 組成

UML類圖

模式講解:
1. 指揮者(Director)直接和客戶(Client)進行需求溝通;
2. 溝通後指揮者將客戶建立產品的需求劃分為各個部件的建造請求(Builder);
3. 將各個部件的建造請求委派到具體的建造者(ConcreteBuilder);
4. 各個具體建造者負責進行產品部件的構建;
5. 最終構建成具體產品(Product)。

2.2 例項講解

接下來我用一個例項來對建造者模式進行更深一步的介紹。

a. 例項概況

  • 背景:小成希望去電腦城買一臺組裝的臺式主機
  • 過程:
    1. 電腦城老闆(Diretor)和小成(Client)進行需求溝通(買來打遊戲?學習?看片?)
    2. 瞭解需求後,電腦城老闆將小成需要的主機劃分為各個部件(Builder)的建造請求(CPU、主機板blabla)
    3. 指揮裝機人員(ConcreteBuilder)去構建元件;
    4. 將元件組裝起來成小成需要的電腦(Product)

b. 使用步驟
步驟1: 定義組裝的過程(Builder):組裝電腦的過程


public  abstract class
Builder {
//第一步:裝CPU //宣告為抽象方法,具體由子類實現 public abstract void BuildCPU(); //第二步:裝主機板 //宣告為抽象方法,具體由子類實現 public abstract void BuildMainboard(); //第三步:裝硬碟 //宣告為抽象方法,具體由子類實現 public abstract void BuildHD(); //返回產品的方法:獲得組裝好的電腦 public abstract Computer GetComputer(); }

步驟2: 電腦城老闆委派任務給裝機人員(Director)

public class Director{
                        //指揮裝機人員組裝電腦
                        public void Construct(Builder builder){

                                 builder. BuildCPU();
                                 builder.BuildMainboard();
                                 builder. BuildHD();
                              }
 }

步驟3: 建立具體的建造者(ConcreteBuilder):裝機人員

//裝機人員1
  public class ConcreteBuilder extend  Builder{
    //建立產品例項
    Computer computer = new Computer();

    //組裝產品
    @Override
    public void  BuildCPU(){  
       computer.Add("組裝CPU")
    }  

    @Override
    public void  BuildMainboard(){  
       computer.Add("組裝主機板")
    }  

    @Override
    public void  BuildHD(){  
       computer.Add("組裝主機板")
    }  

    //返回組裝成功的電腦
     @Override
      public  Computer GetComputer(){  
      return computer
    }  
}

步驟4: 定義具體產品類(Product):電腦

public class Computer{

    //電腦元件的集合
    private List<String> parts = new ArrayList<String>();

    //用於將元件組裝到電腦裡
    public void Add(String part){
    parts.add(part);
}

    public void Show(){
          for (int i = 0;i<parts.size();i++){    
          System.out.println(“元件”+parts.get(i)+“裝好了”);
          }
          System.out.println(“電腦組裝完成,請驗收”);


}

}

步驟5: 客戶端呼叫-小成到電腦城找老闆買電腦


public class Builder Pattern{
  public static void main(String[] args){

//逛了很久終於發現一家合適的電腦店
//找到該店的老闆和裝機人員
  Director director = new Director();
  Builder builder = new ConcreteBuilder();

//溝通需求後,老闆叫裝機人員去裝電腦
director.Construct(builder);

//裝完後,組裝人員搬來組裝好的電腦
Computer computer = builder.GetComputer();
//組裝人員展示電腦給小成看
computer.Show();

    }

}

結果輸出

元件CUP裝好了
元件主機板裝好了
元件硬碟裝好了
電腦組裝完成,請驗收

通過上述這個常見的生活例子,我相信你已經完全明白了建造者模式的原理了!!

3. 優缺點

在全面解析完後,我來分析下其優缺點:

3.1 優點

  • 易於解耦
    將產品本身與產品建立過程進行解耦,可以使用相同的建立過程來得到不同的產品。也就說細節依賴抽象。
  • 易於精確控制物件的建立
    將複雜產品的建立步驟分解在不同的方法中,使得建立過程更加清晰
  • 易於拓展
    增加新的具體建造者無需修改原有類庫的程式碼,易於拓展,符合“開閉原則“。
    每一個具體建造者都相對獨立,而與其他的具體建造者無關,因此可以很方便地替換具體建造者或增加新的具體建造者,使用者使用不同的具體建造者即可得到不同的產品物件。

3.2 缺點

  • 建造者模式所建立的產品一般具有較多的共同點,其組成部分相似;如果產品之間的差異性很大,則不適合使用建造者模式,因此其使用範圍受到一定的限制。
  • 如果產品的內部變化複雜,可能會導致需要定義很多具體建造者類來實現這種變化,導致系統變得很龐大。

4. 應用場景

  • 需要生成的產品物件有複雜的內部結構,這些產品物件具備共性;
  • 隔離複雜物件的建立和使用,並使得相同的建立過程可以建立不同的產品。

5. 總結

本文主要對建造者模式進行了全面介紹,接下來將介紹其他設計模式,有興趣可以繼續關注Carson_Ho的安卓開發筆記!!!!

請幫頂或評論點贊!因為你的鼓勵是我寫作的最大動力!

相關推薦

建造模式Builder Pattern- 易懂設計模式解析

前言 今天我來全面總結一下Android開發中最常用的設計模式 -建造者模式。 目錄 1. 介紹 1.1 定義 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示 1.2 主要作用

代理模式Proxy Pattern- 易懂設計模式解析

前言 今天我來全面總結一下Android開發中最常用的設計模式 - 代理模式。 目錄 1. 介紹 1.1 定義 給目標物件提供一個代理物件,並由代理物件控制對目標物件的引用 代理物件:起到中介作用,

建造模式Builder Pattern

pub 圖片 imp 客戶端 問題 復雜 override 適合 type 定義: 將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示 解決的問題: 方便用戶創建復雜的對象(不需要知道實現過程) 代碼復用性 & 封裝性(將對象構建

C#設計模式(5)——建造模式Builder Pattern

stringbu .... rtm summary 作用 生活 size 買電腦 如果 一、引言   在軟件系統中,有時需要創建一個復雜對象,並且這個復雜對象由其各部分子對象通過一定的步驟組合而成。例如一個采購系統中,如果需要采購員去采購一批電腦時,在這個實際需求中,電腦就

設計模式建造模式Builder Pattern

建造者模式(Builder Pattern)使用多個簡單的物件一步一步構建成一個複雜的物件。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。 一個 Builder 類會一步一步構造最終的物件。該 Builder 類是獨立於其他物件的。 意圖:將一個複雜的構建與其表示相分離,

Java 設計模式——建造模式Builder Pattern

  前言 一、簡介 ​二、實現方式 三、常見第一種方式 (1)一般有以下幾個角色 (2)舉個例子 (3)具體步驟 (4)具體程式碼 三、第二種方式 (1)主要有三個角色:抽象建造者、具體建造者、產品 (2)舉個例子 (3)具體步驟

建造模式Builder Pattern:簡單&粗暴解析

1.前言 2.目錄 3.含義 一個例項有可能需要由很多不同部分組成,”建造者“ 就是把這些組成部分獨立出來 & 構建例項,使用者可以根據按需設定不同組成部分來獲取例項。 4.解決 1.複雜物件的建立。(物件與物件組成解耦) 5.原理

設計模式建造模式Builder Pattern

通過靜態內部類等方式實現的零件無序話構造 程式碼 1.User public class User { private String name; private int age; private String address; public String

設計模式建造模式Builder Pattern

建造者模式,又稱生成器模式:將一個複雜的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。 三個角色:建造者、具體的建造者、監工、使用者(嚴格來說不算) 建造者角色:定義生成例項所需要的所有方法; 具體的建造者角色:實現生成例項所需要的所有方法,並且定義獲取最終生成例項的方法; 監工

我要打十個!詳解建造模式builder pattern

### 前言 “我要打十個”,其實是我要打十個野怪! 這十個野怪呢,它們有不同的技能、裝備和武器,長得也不一樣。這裡野怪是一個蠻複雜的物件,由各個不同的部分組成(技能、裝備、武器等),不同的野怪的它們各部分之間的構成方式就不同。因此,要建立這種複雜物件,就需要使用建造者模式。 ### 什麼是建造者模式 首

C#設計模式-建造模式Builder Pattern

引言 在軟體測試中,一個專案的自動化測試包括UI自動化、API自動化、壓力自動化等,把這些不同型別的自動化測試組裝在一起變構成了一個專案的自動化測試。通過執行專案的自動化測試變能執行他的所有型別的自動化測試。當然,在生活中也有類似的,比如電腦,由CPU、磁碟、顯示卡等部分組成,一輛車由輪胎、車體、發動機等部件

《Java與模式》學習筆記之七―――建造模式Builder Pattern

問題: 當我們要建立的物件很複雜的時候(一般是由很多其它的物件組合而成),最好將物件的建立和表示分離開來,這樣做的好處就是通過一步步地進行復雜物件的建立而且每一步構造的過程引入不同的引數,使得相同的建立步驟可以得到不同的物件。 特別是一個物件的多個構造過程的順序一定時,如構造

觀察模式Observe Pattern:簡單&粗暴解析

1.前言 在之前的文章設計模式(Design pattern):簡單&粗暴解析中已經為大家深入淺出解析了 設計模式 的 七大原則、三大型別。 本文為大家解析三大型別中 行為型 裡其中的 觀察者模式。 文章中例項 linhaojian的Github

工廠模式Factory Pattern:簡單&粗暴解析

1.前言 在之前的文章設計模式(Design pattern):簡單&粗暴解析中已經為大家深入淺出解析了 設計模式 的 七大原則、三大型別。 本文為大家解析三大型別中 建立型 裡其中的 工廠模式。 文章中例項  linhaojian的Githu

單例模式Singleton Pattern:簡單&粗暴解析

1.前言 在之前的文章設計模式(Design pattern):簡單&粗暴解析中已經為大家深入淺出解析了 ‘設計模式’ 的 七大原則、三大型別。 本文為大家解析三大型別中 建立型 裡其中的 ‘單例模式’。 文章中例項 linhaojian的Github

享元模式Flyweight Pattern:簡單&粗暴解析

1.前言 在之前的文章設計模式(Design pattern):簡單&粗暴解析中已經為大家深入淺出解析了 設計模式 的 七大原則、三大型別。 本文為大家解析三大型別中 結構型 裡其中的 享元模式。 文章中例項 linhaojian的Github

外觀模式Facade Pattern:簡單&粗暴解析

1.前言 在之前的文章設計模式(Design pattern):簡單&粗暴解析中已經為大家深入淺出解析了 設計模式 的 七大原則、三大型別。 本文為大家解析三大型別中 結構型 裡其中的 外觀模式。 文章中例項  linhaojian的Githu

裝飾器模式Decorator Pattern:簡單&粗暴解析

1.前言 在之前的文章設計模式(Design pattern):簡單&粗暴解析中已經為大家深入淺出解析了 設計模式 的 七大原則、三大型別。 本文為大家解析三大型別中 結構型 裡其中的 裝飾器模式。 文章中例項 linhaojian的Github

代理模式Proxy Pattern:簡單&粗暴解析

1.前言 在之前的文章設計模式(Design pattern):簡單&粗暴解析中已經為大家深入淺出解析了 設計模式 的 七大原則、三大型別。 本文為大家解析三大型別中 結構型 裡其中的 代理模式。 文章中例項  linhaojian的Githu

7,裝飾模式Decorator Pattern動態的給一個對象添加一些額外的職責。就增加功能來說,此模式比生成子類更為靈活。繼承關系的一個替換方案。

做到 活性 splay .com 重新 裝飾 run play 情況 裝飾( Decorator )模式又叫做包裝模式。通過一種對客戶端透明的方式來擴展對象的功能,是繼承關系的一個替換方案。 裝飾模式就是把要添加的附加功能分別放在單獨的類中,並讓這個