搜尋
首頁後端開發php教程建造者模式是什麼?



建造模式介紹

建造模式(Builder Pattern)是對象的創建模式。它可以將一個產品的內部表象與產品的生成過程分割開來,從而可以使一個建造過程產生具有不同的內部表象的產品物件。

由於建造零件的過程很複雜,因此,這些零件的建造過程往往被「外部化」到另一個乘坐建造者的物件裡,建造者物件返還給客戶端的是一個全部零件都建造完畢的產品對象。它將產品的結構和建造過程對客戶端隱藏起來。

建造模式的四個角色:

1 builder:為建立一個產品物件的各個部件指定抽象介面。

2 ConcreteBuilder:實作Builder的介面以建構和組裝該產品的各個元件,定義並明確它所建立的表示,並 提供一個檢索產品的介面。

3 Director:建構一個使用Builder介面的物件。

4 Product:表示被建構的複雜物件。 ConcreteBuilder創建該產品的內部表示並定義它的組裝過程,包含定義組成部件的類,包括將這些部件組裝成最終產品的介面。

php代码实例
<?php
/**
 * 产品,包含产品类型、价钱、颜色属性
 */
class Product
{
public $_type  = null;
public $_price = null;
public $_color = null;
 
public function setType($type){
echo &#39;设置产品类型&#39;;
$this->_type = $type;
}
 
public function setPrice($price){
echo &#39;设置产品价格,&#39;;
$this->_price = $price;
}
 
 public function setColor($color){
echo &#39;设置产品颜色&#39;;
$this->_color = $color;
}
} 
//不使用builder模式
$product = new Product();
$product->setType("衣服");
$product->setPrice("100");
$product->setColor("红色");
 
//使用builder模式
class ProductBuilder{
public $_config = null;
public $_object = null;
//$config 被设计为一个数组,格式
//$config = array(&#39;type&#39; => &#39;xx&#39;, &#39;price&#39; => &#39;xx&#39;, &#39;color&#39; => &#39;xx&#39;);
public function ProductBuilder($config){
$this->_object = new Product();
$this->_config = $config;
}
 
public function build(){
echo &#39;<br />使用建造者模式:<br />&#39;;
$this->_object->setType($this->_config[&#39;type&#39;]);
$this->_object->setPrice($this->_config[&#39;price&#39;]);
$this->_object->setColor($this->_config[&#39;color&#39;]);
}
 
public function getProduct(){
return $this->_object;
}
}
$config = array(&#39;type&#39; => &#39;汽车&#39;, &#39;price&#39; => &#39;2000000&#39;, &#39;color&#39; => &#39;白色&#39;);
$objBuilder = new ProductBuilder($config);
$objBuilder->build();
$objProduct = $objBuilder->getProduct();
echo &#39;<br />&#39;;
var_dump($objProduct);

建造者模式的優點

首先,建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產品類和建造者類是比較穩定的,因此,將主要的業務邏輯封裝在導演類中對整體而言可以取得比較好的穩定性。

其次,建造者模式很容易擴充。如果有新的需求,透過實現一個新的建造者類別就可以完成,基本上不用修改先前已經測試通過的程式碼,因此也就不會對原有功能引入風險。

建造者模式與工廠模式的區別

我們可以看到,建造者模式與工廠模式是極為相似的,總體上,建造者模式僅僅只比工廠模式多了一個「導演類」的角色。在建造者模式的類別圖中,假如把這個導演類別看做是最終調用的客戶端,那麼圖中剩餘的部分就可以看作是一個簡單的工廠模式了。

與工廠模式相比,建造者模式一般用來創建更為複雜的對象,因為對象的創建過程更為複雜,因此將對象的創建過程獨立出來組成一個新的類別——導演類。也就是說,工廠模式是將物件的全部創建過程封裝在工廠類別中,由工廠類別向客戶端提供最終的產品;而建造者模式中,建造者類別一般只提供產品類別中各個組件的建造,而將具體建造過程交付給導演類。由導演類負責將各個組件依照特定的規則組成產品,然後將組成好的產品交付給客戶端。

總結

建造者模式與工廠模式類似,他們都是建造者模式,適用的場景也很相似。一般來說,如果產品的建造很複雜,那麼請用工廠模式;如果產品的建造更複雜,那麼請使用建造者模式。



以上是建造者模式是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:hcoder。如有侵權,請聯絡admin@php.cn刪除
使用數據庫存儲會話的優點是什麼?使用數據庫存儲會話的優點是什麼?Apr 24, 2025 am 12:16 AM

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

您如何在PHP中實現自定義會話處理?您如何在PHP中實現自定義會話處理?Apr 24, 2025 am 12:16 AM

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

什麼是會話ID?什麼是會話ID?Apr 24, 2025 am 12:13 AM

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

您如何在無狀態環境(例如API)中處理會議?您如何在無狀態環境(例如API)中處理會議?Apr 24, 2025 am 12:12 AM

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。

您如何防止與會議有關的跨站點腳本(XSS)攻擊?您如何防止與會議有關的跨站點腳本(XSS)攻擊?Apr 23, 2025 am 12:16 AM

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

您如何優化PHP會話性能?您如何優化PHP會話性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

什麼是session.gc_maxlifetime配置設置?什麼是session.gc_maxlifetime配置設置?Apr 23, 2025 am 12:10 AM

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

您如何在PHP中配置會話名?您如何在PHP中配置會話名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具