iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
自我挑戰組

Design Pattern - 無所不在的設計模式系列 第 11

[Day11] Design Pattern - Builder建造者模式

  • 分享至 

  • xImage
  •  

前言


前幾天拔牙的後遺症(?),就是連續三天低燒咳嗽QQ
希望趕快好/images/emoticon/emoticon13.gif

今天要講解Creational Pattern的最後一個Pattern啦~~

Builder建造者模式


定義

Builder is a creational design pattern that lets you construct complex objects step by step. The pattern allows you to produce different types and representations of an object using the same construction code.
-- Refactoring Guru

建造者模式就是把複雜的建構過程拆解~

來舉個小例子吧

建造者模式流程

我們同時用建造房子作為例子~

假設我們今天要做一個房子物件
蓋一棟簡單的房子你就只需要4面牆、地板、門、窗、屋頂...
但如果今天想要再複雜一點呢?
有些房子要後院、有些要泳池、有些要加車庫、或是一些水電管線設備通通都要設計進去

最簡單粗暴的方法是建立一個房子的父類別,然後延伸出幾個子類別,
但最終還是可能會遇到子類別越長越多的情況。

例如底下這張圖,一樣出自refactoring guru

建造者模式的幾個重要項目:

  1. Director: 可以是一位建築師或開發商,他知道如何建造一座房子,但不會直接參與建造過程。他們將和客戶合作,了解客戶的需求,例如房子的大小、風格、內部配置等。
  2. Builder: 建造者是一個介面或抽象類別,它定義了構建房子的各個步驟,例如建造牆壁、安裝窗戶、鋪設地板等。每個具體建造者實現了這個接口,根據不同的房子需求來構建房子。
  3. Concrete Builder: 具體建造者實現Builder介面,並提供了實際的構建過程。例如,有一個具體建造者專注於建造現代風格的房子,而另一個專注於古典風格的房子。
  4. Product: 終建成的房子就是Product,它包含了具體建造者所執行的所有步驟,例如牆壁、窗戶、地板等。

客戶可以和開發商合作,提供自己對房子的需求和偏好
然後開發商將這些需求傳遞給相應的具體建造者,而不需要了解內部的建造細節。
這使得客戶可以根據其需求訂製房子,同時也使構建過程更加靈活和可維護。
如果需要新增或更改建造步驟或風格選擇,只需修改相應的具體建造者,而不需要修改客戶端程式碼。

UML



上一篇
[Day10] Design Pattern - Prototype 原型模式
下一篇
[Day12] Design Pattern - Adapter轉接器模式
系列文
Design Pattern - 無所不在的設計模式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言