20190815 構建者模式

2021-09-26 05:28:53 字數 1807 閱讀 2582

builder模式核心思想

1、在靜態內部類中,對外提供獲取外部類物件的方法,如build(),create()等。

2、建立外部類的物件時,傳入靜態內部類物件,以便把引數傳遞到外部類中。

3、在外部類中,提供構造方法,傳遞靜態內部類物件,通過靜態內部類物件,給外部類的成員變數賦值。

4、內部類字段要與外部類的字段相同。

5、內部類中set方法,返回this物件,以便進行鏈式呼叫。

優點:將乙個複雜的物件的構建和表示進行分離,使得同樣的構建過程可以建立不同的表示形式。構建者模式隱藏了複雜物件的建立過程並加以才抽象,通過子類的繼承或者過載的方式,動態的建立具有復合屬性的物件。

構建者模式的核心思想:

1)在靜態內部類中,對外提供獲取外部類物件的方法;

2)在建立外部類的物件時,把內部類傳遞進去,以便傳入引數。

3)在外部類中,提供構造方法,傳遞內部類物件,通過內部類物件給外部類的成員變數賦值。

/**

* 建造者模式:

* 通過靜態內部類實現:builder;

* 建構函式的入參是builder物件,然後依次對自己的成員變數進行賦值,對應的值都是builder物件中的值(外層類建立的時候,屬性由builder物件進行賦值;)

* 修改外層類的構造方法(builder builder);

** 在builder類裡定義了乙份與外層類一模一樣的變數,通過一系列的成員函式對屬性進行設定值;

* 返回值都是this,也就是builder物件本身;

* 最後提供乙個build方法用於建立外層類的物件,返回值為外層類的物件;

* builder類中的成員函式返回builder物件自身的另乙個作用就是讓它支援鏈式呼叫,使**可讀性大大增強;

** 靜態內部類特徵:

* 靜態類不用先建立外部類。可以靜態類看做外部類的靜態變數,使用就不要外部類例項;而非靜態就必須先例項化。

* 建立靜態內部類物件的標準寫法:new outerclass.nestedstaticclass()

** 總結:

* 定義乙個靜態內部類builder,內部的成員變數和外部類一樣

* builder類通過一系列的方法用於成員變數的賦值,並返回當前物件本身(this)

* builder類提供乙個build方法或者create方法用於建立對應的外部類物件,該方法內部呼叫了外部類的乙個私有建構函式,該建構函式的引數就是內部類builder

* 外部類提供乙個私有建構函式供內部類呼叫,在該建構函式中完成成員變數的賦值,取值為builder物件中對應的值

*/

package com.yunque.www.springbootdemo.design.builder;

/** * created on 2018/10/10.

* author:crs

* description:person類

*/public class person

@override

public string tostring() ';

}static class builder

public builder age(int age)

public builder height(double height)

public builder weight(double weight)

/*** 把當前類的物件傳遞出去

** @return person

*/public person create()

}}

構建者模式

定義 從乙個簡單物件一步一步構造複雜物件 優點及使用 list 僅僅通過指定的型別和內容構建複雜物件,而且隱藏構造的實現細節 解耦通過物件元件構造乙個複雜物件的過程 分離構造和顯示的 通過構造過程達到良好的控制 抽象工廠 重點是在工廠模式 簡單工廠或者複雜工廠 而構建者模式重點是由簡單物件構建複雜物...

構建者模式

目的 建立複雜物件 當乙個複雜物件由n個物件組成時,需要進行一系列的拆分,進行組裝,形成大的物件。比如 當建立乙個電腦物件時,電腦是由一系列的元件組合而成,比如滑鼠 鍵盤 顯示器,那麼需要獲取最終的物件,需要先建立一些小的物件。用實際專案中的例子舉例如下 mybatis 在構建乙個sqlsessio...

設計者模式 構建者模式

一 介紹 場景 建造乙個複雜的產品。比如 神舟飛船,iphone,這個複雜的產品建立,有這樣乙個問題需要處理 裝配這些子元件,是不是有個步驟問題?實際開發中,需要的物件,在構建時,也非常複雜,有很多步驟需要處理。建造者模式的本質 分離物件子元件的單獨構造 由builder來負責 和裝配 由direc...