1. 程式人生 > >建造者模式(Builder)

建造者模式(Builder)

一、基本定義:

1、意圖:
將一個複雜物件構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
2、適用場景:
* 多個組成部分,都可以裝配到同一個物件,但是產生的結果不相同
* 相同的方法,不同的執行順序,產生不同的事件結果
例:電腦含有很多零配件,可以算是一個複雜物件。其中記憶體卡,主機板、CPU等都是電腦的組成部分,如果構建一臺電腦,不需要知道是如何組裝的,只需要提供所需要的零配件型號,此時就可以用構建者模式。
3、優點:
* 可以使使用者不必知道內部組成的細節
* 具體構造是獨立的,方便逐步細化
4、類圖:
這裡寫圖片描述
* Director:導演類,負責安排模組順序,通知Builder開始構建
* Builder:抽象Builder類,規範產品的組建
* ConcreteBuilder:構造者實現類,實現抽象類的所有方法,並且返回一個組建好的物件
* Product:產品類

二、例項:

1、產品實體類:

public class Computer {
    private String cpu;
    private String mainBoard;
    private String ram;

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getMainBoard() {
        return mainBoard;
    }

    public
void setMainBoard(String mainBoard) { this.mainBoard = mainBoard; } public String getRam() { return ram; } public void setRam(String ram) { this.ram = ram; } }

2、抽象Builder:

public abstract class Builder {
    public abstract void buildCpu(String cpu);
    public
abstract void buildMainBoard(String mainBoard); public abstract void buildRam(String ram); public abstract Computer build(); }

3、Builder實現類:

public class ComputerBuilder extends Builder {
    private Computer mComputer = new Computer();

    @Override
    public void buildCpu(String cpu) {
        mComputer.setCpu(cpu);
    }

    @Override
    public void buildMainBoard(String mainBoard) {
        mComputer.setMainBoard(mainBoard);
    }

    @Override
    public void buildRam(String ram) {
        mComputer.setRam(ram);
    }

    @Override
    public Computer build() {
        return mComputer;
    }
}

4、導演類:
起到封裝的作用,避免深入到Builder內部的具體實現。可以傳入不同的Builder實現物件。

public class ComputerDirector {
    private Builder mBuilder;

    private ComputerDirector(Builder builder) {
        this.mBuilder = builder;
    }

    public Computer createComputer(String cpu, String mainBoard, String ram) {
        mBuilder.buildCpu(cpu);
        mBuilder.buildMainBoard(mainBoard);
        mBuilder.buildRam(ram);
        return mBuilder.build();
    }
}

5、客戶端呼叫:

public class ComputerTest {
    public static void main(String[] args){
        Builder builder = new ComputerBuilder();
        ComputerDirector director = new ComputerDirector(builder);
        director.createComputer("i3","my board", "4g");
    }
}

特點總結:
* 封裝性:使用建造者模式,可以使客戶端不用知道產品內部實現的細節
* 構造者比較獨立,容易擴充套件

相關推薦

設計模式建造模式Builder

人的 做出 字體 存在 分享 定義 固定 也不會 抽象方法 一個人活到70歲以上,都會經歷這樣的幾個階段:嬰兒,少年,青年,中年,老年。並且每個人在各個階段肯定是不一樣的呀,我覺得可以說世界上不存在兩個人在人生的這5個階段的生活完全一樣,但是活到70歲以上的人,都經歷了這幾

【Unity3D與23種設計模式建造模式Builder

產出 private 一個 gof 行為 並且 bstr reac 定義 GoF中定義: “將一個復雜的構建流程與它的對象表現分離出來,讓相同的構建流程可以產生不同的對象行為表現。” 建造者模式可以分為兩個步驟來實施: 1.將復雜的構建流程獨立出來,並將整個流程分成

GOF23設計模式建造模式builder

gin 實例 情況 gof ace state 實現 oid sql 一、建造者模式概述   建造者模式的本質:     1.分離了對象子組件的單獨構造(由Builder負責)和裝配(由Director負責)。從而可以構造出復雜的對象。這個模式適用於:某個對象的過程復雜的情

設計模式總結篇系列:建造模式Builder

關於建造者模式網上有很多文章,也有些不同的理解。在此結合網上其他文章對建造者模式進行總結。 總體說來,建造者模式適合於一個具有較多的零件(屬性)的產品(物件)的建立過程。根據產品建立過程中零件的構造是否具有一致的先後順序,可以將其分為如下兩種形式。 一、通過Client、Director、Builder和

設計模式 ---建造模式Builder

建造者模式:將一個複雜物件的構建過程和表示過程分離。使得同樣的構建過程可以建立不同的表示。 它主要是用於一些複雜的物件,這些物件的內部構建間的構造順序通常是穩定的,但物件內部的構建同時面臨著複雜的變化。建造者模式提供了一個通用的介面,介面中定義了產品建立的過程

設計模式建造模式Builder

 建造者模式:是將一個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。  建造者模式通常包括下幾個角色: 1. builder(抽象建造者):給出一個抽象結論,以規範產品物

建造模式Builder C++實現

#include <iostream> #include <string> using namespace std; class Product { private : int id; // 假設為複雜物件 string name; // 假設為複雜物件 publi

建造模式Builder

一、基本定義: 1、意圖: 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 2、適用場景: * 多個組成部分,都可以裝配到同一個物件,但是產生的結果不相同 * 相同

複雜物件的建立--建造模式Builder

1初識建造者模式 建造者模式實際上是常用的設計模式。顧名思義,builder的意思是建造者或者建築工人,談到建造自然會想到樓房。樓房是千差萬別的,樓房的外形、層數、內部房間的數量、房間的裝飾等等都不一樣,但是對於建造者來說,抽象出來的建築流程是確定的,往往建築

對Java建造模式Builder的一點理解

一,Builder模式介紹    Builder模式是一步一步建立一個複雜物件的建立型模式,它允許使用者在不知道內部建造細節的情況下,可以更精細的控制物件的構造流程。該模式是為了將構建複雜物件的過程和它的部件解耦,是的構建過程和不見得表示隔離開來。    因為一個複雜的物件有

iOS 設計模式建造模式 Builder

建造者模式是當在建立複雜物件的演算法應該獨立於該物件的組成部分以及它們的裝配方式時適用的模式。 建造者模式包含產品類(Product)、抽象建造者類(Builder)、具體建造者類(ConcreteBuilder1、ConcreteBuilder2…)和指揮者

PHP設計模式建造模式Builder瞭解下

這個建造者模式,我們也可以稱為生成器模式,核心思想是將一個複雜物件的構造與它的表示分離,使同樣的構建過程可以建立不同的表示,這樣的設計模式被稱為建造者模式,簡單點來說就是為了消除其它物件複雜的建立過程。 例如:汽車,他的發動機引擎有好多品牌,輪胎也有各種材質,內飾更是千奇百

java設計模式——建造模式Builder

相對於抽象工廠模式有了一定優勢,抽象工廠模式只能建立儲存單一類的例項,而建造者模式能儲存多個類的例項了。上程式碼,pass:前幾篇都用First、Second啥的,沒法混了,現在換成人了(*^__^*

建造模式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

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