建造者模式

建造者模式

  • 建造者模式主要是为了消除其它对象复杂的创建过程。
  • 建造者设计模式定义了处理其他对象的复杂构建的对象设计。
  • 普通构建类
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    /* 描述一个用户的类,包含用户姓名,年龄,金钱 */
    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->userName . ',年龄是:' . $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();
  • 建造者模式实现
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    //建造者模式,目的是消除其它对象复杂的创建过程
    class UserInfoBuilder {
    protected $obj;

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

    public function buildPeople($peopleInfo) {
    foreach ($peopleInfo as $k=> $v) {
    $method = sprintf('set%s',ucfirst($k));
    $this->obj->$method($v);
    }
    }

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

    /* 创建过程被封装了,用户使用简单了 */
    $peopleInfo = array(
    'userName' => 'initphp',
    'userAge' => 28,
    'userMoney' => '100元'
    );
    $UserInfoBuilder = new UserInfoBuilder;
    $UserInfoBuilder->buildPeople($peopleInfo); //直接一个build
    $UserInfoBuilder->getPeople();
  • 基于建造者设计模式创建一个新的对象。这个对象负责解释来自业务逻辑的结果,并且只调用构建完整小配件所需的功能性。即使必要的信息或业务规则发生变化,主流代码仍然采用相同的处理方式Builder对象。我们只需要修改Builder对象(只在一个位置修改)。这个解决方案不仅节省了时间,而且降低了主代码库的复杂性。