設計模式簡述(五)建造者模式

建造者模式

  • 描述
    • 基本要素
    • 協調類
    • 使用

描述

建造者模式屬于創造型設計模式。
通常用于構建一系列復雜對象,這些對象有一定的共性。
我們可以通過不同的建造者,組裝不同的對象

與工廠模式的區別,建造者模式更側重與基于基礎構件組裝而非直接創建基礎構件

基本要素

  • 定義產品類
public class Product {public void method() {// code}
}
  • 定義抽象建造者
public abstract class Builder {public abstract void process();public abstract Product build();
}
  • 定義具體建造者
public class ABuilder extends Builder {Product product = new Product();@Overridepublic void process() {product.method1();product.method2();}@Overridepublic Product build() {return product;}
}public class BBuilder extends Builder {Product product = new Product();@Overridepublic void process() {product.method1();product.method3();}@Overridepublic Product build() {return product;}
}

協調類

與工廠方法類似,為了避免調用方與眾多建造者子類直接交互。
我們可以定義一個中間協調類

public class BuilderCoordinator {private Builder aBuilder = new ABuilder();private Builder bBuilder = new BBuilder();public Product AProduct() {aBuilder.process();return aBuilder.build();}public Product BProduct() {aBuilder.process();return aBuilder.build();}
}

使用

public class Sample {public static void main(String[] args) {BuilderCoordinator coordinator = new BuilderCoordinator();Product ap = coordinator.AProduct();Product bp = coordinator.BProduct();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75886.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75886.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75886.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java基礎 4.6

1.成員方法練習 //編寫類A:判斷一個數是奇數還是偶數,返回boolean //根據行、列、字符打印對應行數和列數的字符,比如:行4 列4 字符# 則打印相應的效果 public class MethodExercise01 {public static void main(String[] args) …

前端快速入門學習4——CSS盒子模型、浮動、定位

一、盒子模型 所有HTML元素可以看作盒子,在CSS中,"box model"這一術語是用來設計和布局時使用。 CSS盒模型本質上是一個盒子,封裝周圍的HTML元素,它包括:邊距,邊框,填充&#xff0c…

瑞數信息發布《BOTS自動化威脅報告》,揭示AI時代網絡安全新挑戰

近日,瑞數信息正式發布《BOTS自動化威脅報告》,力求通過全景式觀察和安全威脅的深度分析,為企業在AI時代下抵御自動化攻擊提供安全防護策略,從而降低網絡安全事件帶來的影響,進一步增強業務韌性和可持續性。 威脅一&am…

Docker設置代理

目錄 前言創建代理文件重載守護進程并重啟Docker檢查代理驗證 前言 拉取flowable/flowable-ui失敗,用DaoCloud源也沒拉下來,不知道是不是沒同步。索性想用代理拉鏡像。在此記錄一下。 創建代理文件 創建docker代理配置 sudo mkdir -p /etc/systemd/s…

Debezium嵌入式連接postgresql封裝服務

文章目錄 1.項目結構:2.依賴:3.application.properties4.DebeziumConnectorConfig類5.TableEnum類6.TableHandler接口(表處理抽象)7.DefaultTableHandler默認實現類8.UserTableHandler處理類9.TableHandlerFactory工廠10.Debezium…

ER-圖,詳情和畫法

一、E-R圖的核心元素 1.實體 表示現實中對象或概念,用矩形表示 示例:用戶、老師、學生 2.屬性 描述實體的特征,用橢圓表示。 分為主鍵(用戶id) 和非主鍵(用戶昵稱) 3.關系 表示實體間的…

Windows Flip PDF Plus Corporate PDF翻頁工具

軟件介紹 Flip PDF Plus Corporate是一款功能強大的PDF翻頁工具,也被稱為名編輯電子雜志大師。這款軟件能夠迅速將PDF文件轉換為具有翻頁動畫效果的電子書,同時保留原始的超鏈接和書簽。無論是相冊、視頻、音頻,還是Flash、視頻和鏈接&#…

Linux文件系統中的Page Cache和內存管理中的Page之間的關系

Linux文件系統中的Page Cache和內存管理中的Page之間有密切的關聯,兩者在底層機制上緊密結合,共同實現高效的內存和文件系統管理。以下是它們的關系和關鍵點: 核心關系 Page Cache的底層是內存Page Page Cache是由內存管理中的物理內存頁&…

每日一個小病毒(C++)EnumChildWindows+shellcode

這里寫目錄標題 1. `EnumChildWindows` 的基本用法2. 如何利用 `EnumChildWindows` 執行 Shellcode?關鍵點:完整 Shellcode 執行示例3. 為什么 `EnumChildWindows` 能執行 Shellcode?4. 防御方法5. 總結EnumChildWindows 是 Windows API 中的一個函數,通常用于枚舉所有子窗…

AI爬蟲?爬!

1.你是否還在為大模型的key而感到憂傷和囊中羞澀,openrouter.ai,目前可免費白嫖多個大模型,代碼如下 from openai import OpenAIclient OpenAI(base_url"https://openrouter.ai/api/v1",api_key"", )completion clien…

洛谷題單3-P5720 【深基4.例4】一尺之棰-python-流程圖重構

題目描述 《莊子》中說到,“一尺之棰,日取其半,萬世不竭”。第一天有一根長度為 a a a 的木棍,從第二天開始,每天都要將這根木棍鋸掉一半(每次除 2 2 2,向下取整)。第幾天的時候木…

c++中的auto關鍵字

在 C 中,auto 是一個類型推斷關鍵字(C11 引入),允許編譯器根據變量的初始化表達式自動推導其類型。它極大地簡化了代碼編寫,尤其在涉及復雜類型或模板的場景中。以下是 auto 的詳細說明: 1. 基本用法 1.1 …

開發指南111-關閉所有打開的子窗口

門戶系統是通過window.open通過單點登錄的模式打開子系統的,這就要求門戶系統退出時,關閉所有打開的子系統。 平臺處理這一問題的核心原理如下: 主窗口定義: allChildWindows:[], //所有子窗口 pushChildWindow(childWindow){ …

Kotlin語言進階:協程、Flow、Channel詳解(二)

Kotlin語言進階:協程、Flow、Channel詳解(二) 一、Flow基礎 1.1 什么是Flow Flow是Kotlin提供的用于處理異步數據流的解決方案,它建立在協程之上,具有以下特點: 冷流特性:只有在收集時才會開始發射數據背壓處理:自動處理生產者和消費者速度不匹配的問題組合操作:提…

mysql中my.cnf權限不能過大。否則無法生效

mysql 報錯 World-writable config file ‘/etc/my.cnf‘ is ignored. /etc/my.cnf 配置文件, 或著docker 掛載的配置文件(宿主機中的配置文件),權限過大 如是二進制啟動 chmod 644 /etc/my.cnf 如是docker啟動 chmod 644 /opt/docker-data/mysql/conf/my.cnf 重啟服務,就可…

Spring 中的 @Autowired 和 @Resource

🧩 一、Autowired 和 Resource 的基本作用 注解來源作用AutowiredSpring 提供(org.springframework.beans.factory.annotation.Autowired)按類型 自動注入ResourceJDK 提供(javax.annotation.Resource)默認按名稱 注入…

anomalib—2—輸入圖像大小調整

三個地方 第一:在定義model時,要在pre_processor里面去定義一個前處理,前處理就一個功能,定義圖像的大小 pre_processor0 Patchcore.configure_pre_processor( image_size (128, 128)) model Patchcore( backbone"wide_r…

JSX、支持HTML標簽、Ref的使用、虛擬DOM的使用

🤍 前端開發工程師、技術日更博主、已過CET6 🍨 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 🕠 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 🍚 藍橋云課簽約作者、…

JVM 學習計劃表(2025 版)

JVM 學習計劃表(2025 版) 📚 基礎階段(2 周) 1. JVM 核心概念 ?JVM 作用與體系結構 理解 JVM 在 Java 跨平臺運行中的核心作用,掌握類加載子系統、運行時數據區、執行引擎的交互流程?內存結構與數據存…

進程內存分布--之理論知識

一個由C/C編譯的程序占用的內存分為以下幾個部分 : 1、棧區(stack):由編譯器自動分配釋放 ,存放函數調用函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。 2、堆區(heap&#xf…