PHP设计模式系列 - 建造者模式

未匹配的标注
  • 什么是建造者模式

建造者模式主要是为了消除其它对象复杂的创建过程。

  • 设计场景
  1. 有一个用户的UserInfo类,创建这个类,需要创建用户的姓名,年龄,金钱等信息,才能获得用户具体的信息结果。

  2. 创建一个UserInfoBuilder 用户建造者类,这个类,将UserInfo复杂的创建姓名,年龄,金钱等操作封装起来,简化用户类的创建过程

  • 代码:UserInfo类,创建UserInfo类是复杂的,痛苦的。
<?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->setUserName.',年龄是:'.$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 用户信息建造者类,将UserInfo的创建过程封装掉,开发者使用起来心情舒畅
<?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();

参考:《PHP设计模式》Aaron Saray著

原文

blog.csdn.net/initphp/article/deta...

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
wangchunbo
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~