ホームページ  >  記事  >  バックエンド開発  >  高度なオブジェクト指向設計パターン: ビルダー パターン

高度なオブジェクト指向設計パターン: ビルダー パターン

巴扎黑
巴扎黑オリジナル
2017-05-20 15:04:491504ブラウズ

ビルダーモードとは何ですか?

複雑なオブジェクトの構築をその表現から分離し、同じ構築プロセスで異なる表現を作成できるようにするデザイン パターン。

設計シナリオ:

ユーザーの UserInfo クラスがあります。このクラスを作成するには、ユーザーの名前、年齢、趣味などの情報を作成して、ユーザー固有の情報結果を取得する必要があります。

UserBuilder ユーザー ビルダー クラスを作成します。このクラスは、UserInfo の名前、年齢、趣味、その他の操作の複雑な作成をカプセル化し、ユーザー クラスの作成プロセスを簡素化します

これはユーザー クラスです

class UserInfo
{    
          protected $_userName;    
          protected $_userAge;    
          protected $_userHobby;    
     
     public function setUserName($userName)
    {        
            $this->_userName = $userName;
    }    
    
    public function setUserAge($userAge)
    {        
            $this->_userAge = $userAge;
    }    
    
    public function setUserHobby($userHobby)
    {        
            $this->_userHobby = $userHobby;
    }    
    
    public function getPeopleInfo()
    {        
           echo  "<br>这个人的名字是:" . $this->_userName . "<br>年龄为:" . $this->_userAge . "<br>爱好:" . $this->_userHobby;
    }
}

ユーザーの情報を取得するプロセスは次のとおりです:

$modelUser = new UserInfo();
$modelUser->setUserName(&#39;松涛&#39;);
$modelUser->setUserAge(&#39;23&#39;);
$modelUser->setUserHobby(&#39;推理小说&#39;);
$modelUser->getPeopleInfo();

結果は次のとおりです:

その人の名前: ソンタオ
年齢: 23歳
趣味: ミステリー小説

この時点でユーザービルダーを作成しますクラス

class UserBuilder
{    
      protected $_obj;    

      public function __construct()
    {        
            $this->_obj = new UserInfo();
    }   
    
     public function builderPeople($userInfo)
    {       
            $this->_obj->setUserName($userInfo[&#39;userName&#39;]);
            $this->_obj->setUserAge($userInfo[&#39;userAge&#39;]); 
            $this->_obj->setUserHobby($userInfo[&#39;userHobby&#39;]);
    }    
    
     public function getBuliderPeopleInfo()
    {        
            $this->_obj->getPeopleInfo();
    }
}

は、複雑な作成プロセスを builderPeople メソッドにカプセル化します。 次のステップはオブジェクトを作成することです:

$userArr = array(    &#39;userName&#39; => &#39;松涛&#39;,
    &#39;userAge&#39; => &#39;23&#39;,
    &#39;userHobby&#39; => &#39;推理小说&#39;);
    $modelUserBuilder = new UserBuilder();
    $modelUserBuilder->builderPeople($userArr);
    $modelUserBuilder->getBuliderPeopleInfo();

出力結果は次のとおりです:

人の名前: Songtao
年齢: 23 歳
趣味: 推理小説

長所:

ビルダーモードは良いものになる可能性がありますオブジェクトの実装は、関連する「ビジネス」ロジックから分離されているため、イベント ロジックを変更せずに実装を追加 (または変更) することが非常に簡単になります。

欠点:

ビルダーインターフェースを変更すると、すべての実行クラスが変更されます。

ビルダー パターンは次の状況で使用する必要があります:

1. 生成する必要がある製品オブジェクトの内部構造が複雑です。
2. 生成する必要がある製品オブジェクトのプロパティは相互に依存しており、ビルダー パターンによって生成順序が強制される場合があります。
3. オブジェクト作成プロセス中に、システム内の他のオブジェクトが使用されますが、製品オブジェクトの作成中に取得するのは簡単ではありません。

上記の例に基づいて、ビルダー モードの効果を得ることができます:
1. ビルダー モードを使用すると、製品の内部の外観を独立して変更できます。ビルダー パターンを使用すると、クライアントは製品の内部構成の詳細を知る必要がなくなります。
2. 各ビルダーは比較的独立しており、他のビルダーとは何の関係もありません (独立した制御ロジック)。
3. モデルによって構築された最終製品の制御が容易になります。

ビルダー モードとファクトリー モードの違い:

一般に、ビルダー モードとファクトリー モードには、「ディレクター クラス」の文字が 1 つだけ多いことがわかります。 。ビルダーパターンのクラス図において、ディレクタークラスを最終的に呼び出されるクライアントとみなすと、図の残りの部分は単純なファクトリパターンとみなすことができます。

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

以上が高度なオブジェクト指向設計パターン: ビルダー パターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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