PHP设计模式---建造模式(Builder Pattern)

优缺点:

优点:建造模式可以让一个产品的内部表现和产品的生产过程分离,从而可以生成具有不同内部表象的产品
缺点:建造者的接口修改会倒是所有执行类的修改

适用性:需要生成的产品对象有负责的内部接口

需要成产品对象得属性相互依赖,建造这模式可以强迫生成顺序在对象创建过程中使用到系统中的一些其他对象,这些对象在产品对象得创建过程中不易得到
其主要是为了消除其他对象复杂的创建过程

代码示例🌰

class UserInfo
{ 

    protected $userName = ''; 
    protected $userAge = ''; 
    protected $userMoney = ''; 

    public function setUserName($userName) { 
        $this->userName = $userName; 
    }    

    public function setUserAge($userAge) { 
        $this->userAge = $userAge; 
    }    

    public function setUserMoney($userMoney) { 
        $this->userMoney = $userMoney; 
    } 

    public function getPeople() { 
        echo "这个人的姓名是:" . $this->setUserName . ',年龄是:'  . $this->userAge . ', 金钱:' . $this->userMoney; 
    } 
} 
/* 实例化,并且创建这个用户的时候,是很痛苦的,需要设置用户名,年龄和金钱*/ 
$peopleInfo = array( 
    'userName' => 'initphp', 
    'userAge' => 28, 
    'userMoney' => '100元' 
    ); 
$UserInfo = new UserInfo; 
//下面需要一步步的设置用户信息,才能得到用户详细信息,过程纠结而痛苦 
$UserInfo->setUserName($peopleInfo['userName']);  
$UserInfo->setUserAge($peopleInfo['userAge']); 
$UserInfo->setUserMoney($peopleInfo['userMoney']); 
$UserInfo->getPeople();

代码:UserInfoBuilder 用户信息建造者类,将UserInfo的创建过程封装

<?php 
//建造者模式,目的是消除其它对象复杂的创建过程 
class UserInfoBuilder { 
    protected $obj; 

    public function __construct() { 
        $this->obj = new UserInfo; 
    } 

    public function buildPeople($peopleInfo) { 
        $this->obj->setUserName($peopleInfo['userName']); 
        $this->obj->setUserAge($peopleInfo['userAge']); 
        $this->obj->setUserMoney($peopleInfo['userMoney']); 
    }  

    public function getPeople() { 
        $this->obj->getPeople(); 
    } 
} 

/* 创建过程被封装了,用户使用简单了 */ 
$peopleInfo = array( 
    'userName' => 'initphp', 
    'userAge' => 28, 
    'userMoney' => '100元' 
    ); 
$UserInfoBuilder = new UserInfoBuilder; 
$UserInfoBuilder->buildPeople($peopleInfo); //直接一个build 
$UserInfoBuilder->getPeople();