ホームページ >バックエンド開発 >PHPチュートリアル >ビルダーパターンとは何ですか?

ビルダーパターンとは何ですか?

藏色散人
藏色散人転載
2019-04-15 16:16:114572ブラウズ



ビルダー パターンの概要

ビルダー パターンは、オブジェクト作成モードです。プロダクトの内部表現をプロダクト生成プロセスから分離できるため、構築プロセスで異なる内部表現を持つプロダクト オブジェクトを生成できます。

パーツの構築プロセスは複雑であるため、これらのパーツの構築プロセスは、ビルダー上にある別のオブジェクトに「外部化」されることがよくあります。ビルダー オブジェクトは、すべてのパーツが含まれるモデルをクライアントに返します。完成した製品オブジェクト。製品の構造と構築プロセスをクライアントから隠します。

構築モードの 4 つの役割:

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);

ビルダー パターンの利点

まず、ビルダー パターンはカプセル化が優れています。ビルダー パターンを使用すると、変更を効果的にカプセル化できます。ビルダー パターンが使用されるシナリオでは、一般的なプロダクト クラスとビルダー クラスは比較的安定しています。したがって、主要なビジネス ロジックをディレクター クラスにカプセル化すると、全体的により良い結果が得られます。安定性は良好です。

第 2 に、ビルダー パターンは拡張が簡単です。新たな要件が発生した場合は、新たなビルダークラスを実装することで対応可能であり、基本的には以前にテストしたコードを修正する必要がないため、本来の機能を損なうことはありません。

ビルダー パターンとファクトリ パターンの違い

ビルダー パターンとファクトリ パターンは非常によく似ていることがわかります。一般に、ビルダー パターンはファクトリ モードと比較しただけです。 、「ディレクター」の役割がもう 1 つあります。ビルダーパターンのクラス図において、ディレクタークラスを最終的に呼び出されるクライアントとみなすと、図の残りの部分は単純なファクトリパターンとみなすことができます。

ファクトリ パターンと比較すると、ビルダー パターンは一般に、より複雑なオブジェクトを作成するために使用されます。オブジェクト作成プロセスがより複雑であるため、オブジェクト作成プロセスは分離されて、新しいクラスである Director の種類を形成します。言い換えれば、ファクトリ パターンではオブジェクト作成プロセス全体がファクトリ クラスにカプセル化され、ファクトリ クラスは最終製品をクライアントに提供します。ビルダー パターンでは、ビルダー クラスは通常、製品クラスの各コンポーネントの構築のみを提供します。 . 具体的な構築プロセスはディレクタークラスに引き継がれます。ディレクター クラスは、特定のルールに従って各コンポーネントを製品に構成し、組み立てられた製品をクライアントに配信する責任を負います。

概要

ビルダー パターンはファクトリ パターンに似ており、どちらもビルダー パターンであり、適用可能なシナリオも非常に似ています。一般に、製品の構築が複雑な場合はファクトリ パターンを使用し、製品の構築がより複雑な場合はビルダー パターンを使用します。



以上がビルダーパターンとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はhcoder.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。