ホームページ  >  記事  >  バックエンド開発  >  PHPデザインパターンビルダーパターンの詳細説明

PHPデザインパターンビルダーパターンの詳細説明

*文
*文オリジナル
2018-01-05 17:51:342293ブラウズ

この記事では、主に PHP 設計モードのビルダー モードを紹介します。PHP を使用してビルダー モードを実装する方法について、興味のある方は参考にしてください。お役に立てれば幸いです。

ビルダー モードでは、プロダクトの内部表現をプロダクトの製造プロセスから分離できるため、異なる内部表現を持つプロダクトを生成できます。
1. ビルダー パターンの構造図

2. ビルダー パターンの主な役割
抽象ビルダー (Builder) の役割: 製品のさまざまなコンポーネントを標準化するための抽象インターフェイスを定義します構築 (つまり、特定のビルダーのメソッド実装の指定)。指定されたメソッドには、構築メソッドと結果を返すメソッドが含まれている必要があります。
コンクリート ビルダー (ConcreteBuilder) ロール: 抽象ビルダー ロールによって定義されたメソッドを実装します。特定のビルダーはビジネス ロジックと密接に関連しており、アプリケーションはこのロールに実装された構築メソッドを呼び出すことによって最終的にプロダクトを作成します。構築が完了すると、構築されたプロダクト インスタンスが結果リターンを通じて返されます。方法。通常、クライアントまたは抽象ファクトリーによって外部で作成されます。
ディレクター ロール: このロールの役割は、製品を構築するために特定のビルダー ロールを呼び出すことです。ディレクターは製品カテゴリとは直接の関係はありません。製品カテゴリと対話する具体的な抽象的な役割です。
プロダクトの役割: ディレクターの指導の下、ビルダーによって作成された複雑なオブジェクト
ディレクターの役割は、クライアントのビジネス ロジックを理解し、プロダクトの作成に対するクライアントのリクエストを分割します。コンポーネントを選択してから、特定の製品ロールを呼び出してビルド操作を実行します。それはクライアントをコンクリート建設者から分離します。
3. ビルダー パターンの利点と欠点
ビルダー パターンの利点: ビルダー パターンは、オブジェクトの実装を関連する「ビジネス」ロジックから適切に分離できるため、イベントを変更せずにイベント ロジックを維持できます。ロジックを実装することで、実装の追加 (または変更) が非常に簡単になります。
ビルダー パターンの欠点: ビルダー インターフェイスの変更は、すべての実行クラスの変更につながります。
4. Builder モードの使用シナリオと効果
Builder モードは次の状況で使用する必要があります:
1. 生成する必要がある製品オブジェクトの内部構造が複雑です。
2. 生成する必要がある製品オブジェクトのプロパティは相互に依存しており、ビルダー パターンによって生成順序が強制される場合があります。
3. オブジェクト作成プロセス中に、システム内の他のオブジェクトが使用されますが、製品オブジェクトの作成中に取得するのは簡単ではありません。
ビルダーモードを使用すると、主に次の効果があります:
1. ビルダーモードを使用すると、製品の内部の外観を独自に変更できます。ビルダー パターンを使用すると、クライアントは製品の内部構成の詳細を知る必要がなくなります。
2. 各ビルダーは比較的独立しており、他のビルダーとは何の関係もありません。
3. モデルによって構築された最終製品の制御が容易になります。
5. ビルダーパターンとその他のパタ​​ーン
抽象ファクトリパターン (抽象ファクトリパターン): 抽象ファクトリパターンでは、ファクトリオブジェクトが呼び出されるたびに完全な製品オブジェクトが返され、クライアントはアセンブリを行うことができます。これらの製品は、より大規模で複雑な製品になる場合もあれば、そうでない場合もあります。ビルダーパターンは異なり、複雑な製品をピースごとに構築し、この製品の組み立てプロセスはビルダー内で行われます。両者の違いは、組立工程の有無と、組立工程がどこで行われるかです。これら 2 つのデザイン パターンは一緒に使用できます。構築ロールを呼び出すことにより、クライアントは抽象ファクトリ パターン内の別のファクトリ ロールを間接的に呼び出します。ファクトリ モードではさまざまな製品ファミリから部品が返され、ビルダー モードでは部品が組み立てられます。

戦略モード: ビルダーモードは構造的に戦略モードに非常に似ています。実際、ビルダーモードは戦略モードの特殊なケースです。両者の違いは、意図の違いにあります。ビルダー パターンはクライアント上で動作して新しいオブジェクトを少しずつ構築しますが、ストラテジ パターンの目的はアルゴリズムに抽象インターフェイスを提供することです。

ビルダーパターンとテンプレートメソッドパターン: ビルダーパターンが退化してディレクターの役割を失った後、テンプレートメソッドパターンに発展する可能性があります(つまり、構築プロセスのアルゴリズム実装を構築ロールに配置します)。

ビルダーパターンと構成パターン: 構成パターンはオブジェクトツリーの構成構造を記述し、ビルダーパターンはオブジェクトツリーの生成プロセスを記述するために使用できます。
上記の 4 点は「Java とパターン」からのものです
6. ビルダー パターン PHP の例

<?php
/**
 * 产品
 * 此处仅以一个产品类中的字符串演示产品
 */
class Product {                          
 /**
 * 产品的组成部分集合
 */
 private $_parts;
 
 public function __construct() {
 $this->_parts = array();
 }
 
 public function add($part) {
 return array_push($this->_parts, $part);
 }
 
 public function show() {
 echo "the product include:";
 array_map(&#39;printf&#39;, $this->_parts);
 }
}
 
/**
 * 抽象建造者 
 */
abstract class Builder {
 
 /**
 * 产品零件构造方法1
 */
 public abstract function buildPart1();
 
 
 /**
 * 产品零件构造方法2
 */
 public abstract function buildPart2();
 
 
 /**
 * 产品返还方法
 */
 public abstract function getResult();
}
 
/**
 * 具体建造者
 */
class ConcreteBuilder extends Builder {
 
 private $_product;
 
 public function __construct() {
 $this->_product = new Product();
 }
 
 public function buildPart1() {
 $this->_product->add("Part1");
 }
 
 public function buildPart2() {
 $this->_product->add("Part2");
 }
 
 public function getResult() {
 return $this->_product;
 }
}
 
/**
 * 导演者
 */
class Director {
 
 public function __construct(Builder $builder) {
 $builder->buildPart1();
 $builder->buildPart2();
 }
}
 
 
 
class Client {
 
 /**
 * Main program.
 */
 public static function main() {
 $buidler = new ConcreteBuilder();
 $director = new Director($buidler);
 $product = $buidler->getResult();
 $product->show();
 }
 
}
 
Client::main();
?>

関連する推奨事項:

PHP デザイン パターンのアダプター パターンの詳細な説明

PHPデザインパターンのIteratorパターンの詳細説明

PHPデザインパターンのDecoratorパターンの詳細説明

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。