Builder模式

来源:https://www.cnblogs.com/milovetingting/archive/2020/01/15/12194788.html
-Advertisement-
Play Games

個人博客 "http://www.milovetingting.cn" Builder模式 模式介紹 Builder模式是一步一步創建一個複雜對象的創建型模式,它允許用戶在不知道內部構建細節的情況下,可以更精細地控制對象的構建流程。該模式是為了將構建複雜對象的過程和它的部件解耦,使得構建過程和部件的 ...


個人博客

http://www.milovetingting.cn

Builder模式

模式介紹

Builder模式是一步一步創建一個複雜對象的創建型模式,它允許用戶在不知道內部構建細節的情況下,可以更精細地控制對象的構建流程。該模式是為了將構建複雜對象的過程和它的部件解耦,使得構建過程和部件的表示隔離開來。

模式定義

將一個複雜對象的構建與它的表示分離,使得同樣的構建可以創建不同的表示。

使用場景

  1. 相同的方法,不同的執行順序,產生不同的事件結果時。

  2. 多個部件或零件,都可以裝配到一個對象中,但是產生的運行結果又不相同時。

  3. 產品類非常複雜,或者產品類中的調用順序不同產生了不同的作用。

  4. 當初始化一個對象特別複雜,如參數多,且很多參數都具有預設值時。

模式的簡單實現

Computer類

public class Computer {

    private String mCpu;
    private String mScreen;
    private String mHd;

    public Computer(String cpu, String screen, String hd) {
        this.mCpu = cpu;
        this.mScreen = screen;
        this.mHd = hd;
    }

    @Override
    public String toString() {
        return "Computer [mCpu=" + mCpu + ", mScreen=" + mScreen + ", mHd=" + mHd + "]";
    }

}

ComputerBuilder類

public class ComputerBuilder {

    public static class Builder {

        private String mCpu = "cpu";
        private String mScreen = "screen";
        private String mHd = "hd";

        public Builder cpu(String cpu) {
            mCpu = cpu;
            return this;
        }

        public Builder screen(String screen) {
            mScreen = screen;
            return this;
        }

        public Builder hd(String hd) {
            mHd = hd;
            return this;
        }

        public Computer build() {
            return new Computer(mCpu, mScreen, mHd);
        }

    }

}

預設使用

public static void main(String[] args) {
        Computer computer = new ComputerBuilder.Builder().build();
        System.out.println(computer);
    }

輸出日誌

Computer [mCpu=cpu, mScreen=screen, mHd=hd]

自定義參數

public static void main(String[] args) {
        Computer computer = new ComputerBuilder.Builder().cpu("CPU").screen("SCREEN").hd("HD").build();
        System.out.println(computer);
    }

輸出日誌

Computer [mCpu=CPU, mScreen=SCREEN, mHd=HD]

小結

Builder模式在Android開發中較為常用,通常作為配置類的構建器,將配置的構建和表示分離開來,同時也是將配置從目標類中隔離出來,避免過多的setter方法。Builder模式比較常見的實現形式是通過調用鏈實現,使得代碼更簡潔、易懂。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原創文章,轉載務必註明出處。 今天工作的時候,碰到一個問題,涉及oracle行轉列,用了半小時解決,因此在這裡寫個博客記錄一下解決辦法。 原資料庫表的數據是: 想要達到的效果是: 經過思考,這是一個oracle行轉列的操作,根據xn,qxdm,nj這三列值來分組查詢所有的數據,把xn,qxdm,nj ...
  • 問題描述:需要將140伺服器中的tbomnew實例下的部分用戶導入到118伺服器下的tbompx實例中,本次導入導出的兩個資料庫均為19C 部分用戶名:CORE,MSTDATA,BOMMGMT,CFGMGMT,CHGMGMT,CUST,integration 1.導入指定140伺服器的實例名tbom ...
  • 場景 Centos中Redis的下載編譯與安裝(超詳細): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 在上面安裝好Redis後會在安裝目錄下的bin下自動生成一堆腳本。 其中redis-server就是re ...
  • 一、記憶體文件系統足夠的緩存 Elasticsearch嚴重依賴於文件系統緩存,以加快搜索速度。通常,您應確保至少有一半的可用記憶體分配給文件系統緩存,以便Elasticsearch可以將索引的熱區保留在物理記憶體中。 二、使用更快的硬體 如果搜索是受CPU限制的,那就加大CPU。ES對CPU的要求,使用 ...
  • 問題描述 業務需要一個長期運行的程式,將上傳的文件存放至HDFS,程式啟動後,剛開始一切正常,執行一段時間(一般是一天,有的現場是三天),就會出現認證錯誤,用的JDK是1.8,hadoop client,對應的版本是2.5.1,為什麼強調這個版本號,因為錯誤的根本原因就在於版本問題 錯誤日誌 業務程 ...
  • 前提要述:參考書籍《MySQL必知必會》 6.1 更新數據 為了更新(修改)表中的數據,可使用UPDATE語句。可採用兩種方式使用UPDATE: 更新表中特定的行; 更新表中所有的行。 UPDATE語法的結構由3部分組成: 要更新的表; 列名和它們的新值; 確定要更新行的過濾條件(WHERE關鍵字) ...
  • 【Mysqli面向對象方式操作資料庫】 添加、修改、刪除數據 $mysqli = new mysqli('localhost','root','123456','test'); $mysqli->query('set names utf8'); //添加數據 $result = $mysqli->q ...
  • 場景 NoSQL,泛指非關係型的資料庫,NoSQL即Not-Only SQL,它可以作為關係型資料庫的良好補充。隨著互聯網web2.0網站的興起,非關係型的資料庫現在成了一個極其熱門的新領域,非關係資料庫產品的發展非常迅速 Redis是用C語言開發的一個開源的高性能鍵值對(key-value)資料庫 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...