建造者模式

场景
  1. 有一个用户的 UserInfo 类,创建这个类,需要创建用户的姓名,年龄,金钱等信息,才能获得用户具体的信息结果。
  2. 创建一个 UserInfoBuilder 用户建造者类,这个类,将 UserInfo 复杂的创建姓名,年龄,金钱等操作封装起来,简化用户类的创建过程
代码

UserInfo 类,UserInfoBuilder 用户信息建造者类

<?php

// 建造者模式,目的是消除其它对象复杂的创建过程  
// 描述一个用户的类,包含用户姓名,年龄,金钱 
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 = [
    'userName' => 'initphp',
    'userAge' => 28,
    'userMoney' => '100元',
];

$UserInfo = new UserInfo;

// 下面需要一步步的设置用户信息,才能得到用户详细信息,过程纠结而痛苦  
$UserInfo->setUserName($peopleInfo['userName']);
$UserInfo->setUserAge($peopleInfo['userAge']);
$UserInfo->setUserMoney($peopleInfo['userMoney']);
$UserInfo->getPeople();

UserInfoBuilder 用户信息建造者类,UserInfoBuilder 用户信息建造者类

<?php  

// 建造者模式,目的是消除其它对象复杂的创建过程
include("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 = [
    'userName' => 'initphp',
    'userAge' => 28,
    'userMoney' => '100元',
];
$UserInfoBuilder = new UserInfoBuilder;
// 直接一个 build
$UserInfoBuilder->buildPeople($peopleInfo);
$UserInfoBuilder->getPeople();
执行结果
这个人的姓名是:initphp,年龄是:28, 金钱:100元  
这个人的姓名是:initphp,年龄是:28, 金钱:100元

出自:https://learnku.com/docs/shxdledu/php-design-patterns-series-builder-mode/9295

彼特城博客
请先登录后发表评论
  • latest comments
  • 总共0条评论