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...