PHP设计模式之建造者模式定义与用法简单示例


Posted in PHP onAugust 13, 2018

本文实例讲述了PHP设计模式之建造者模式。分享给大家供大家参考,具体如下:

建造者模式:

将复杂对象的创建过程和表示进行分离(好吧,我也看不懂什么意思1)。

来点我人类能听懂的话:

  • 1、在客户端看来需要的仅仅是实例化后的类对象(大多数情况下是需要类的属性)。
  • 2、传统方式下当类有了之后,一般直接通过new class()的方式直接进行实例化,然后通过$obj->set1()构建属性1,$obj->set2()构建属性2,$obj->set3()构建属性3。。。
  • 3、传统方式有一个很大的弊端:当我们的类发生改变后,我们需要大量的修改,比如文件1中加上$obj->set4(),文件2中加上$obj->set4(),增加很多的工作量。
  • 4、建造者模式会给出构建对象的具体实现类,将对象的创建实例化过程封装在建造者类中,并给出一个返回构建后对象的方法,将构建后的对象返回。
  • 5、当类发生改变后,只需要改变建造者类中构建对象的build()方法,对客户端来说,这并不可见,并且不用做修改就得到了修改后的对象。改动的只是需求对象修改后的逻辑处理。

代码:

/**
* 产品类Person
*/
class Person
{
  public $_head;
  public $_body;
  public function setHead($head){
    $this->_head=$head;
  }
  public function getHead(){
    echo $this->_head;
  }
  public function setBody($body){
    $this->_body=$body;
  }
  public function getBody(){
    echo $this->_body;
  }
}
/*
抽象建造者:
定义的一个抽象接口,用于对具体建造者类进行规范
*/
interface Builder{
  public function buildHead();
  public function buildBody();
  public function getResult();
}
/*
具体建造者:
用于实现具体建造者类
*/
class ConcreteBuilder implements Builder{
  public $person;
  public $data;
  public function __construct($data){
    $this->person=new Person();
    $this->data=$data;
  }
  public function buildHead(){
    $this->person->setHead($this->data['head']);
  }
  public function buildBody(){
    $this->person->setBody($this->data['body']);
  }
  public function getResult(){
    return $this->person;
  }
}
/*
导演者类:
用于调用具体建造者类创建产品类实例
*/
class Director{
  public function __construct(ConcreteBuilder $builder){
    $builder->buildHead();
    $builder->buildBody();
  }
}
/*
客户端:
根据需求进行逻辑处理
*/
$data=array(
  'head'=>'大头儿子',
  'body'=>'身体棒棒哒'
  );
$builder=new ConcreteBuilder($data);
$director=new Director($builder);
$person=$builder->getResult();
echo $person->_head;
echo $person->_body;

运行结果:

大头儿子身体棒棒哒

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
如何将数据从文本导入到mysql
Oct 09 PHP
php小型企业库存管理系统的设计与实现代码
May 16 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
php实现cc攻击防御和防止快速刷新页面示例
Feb 13 PHP
smarty获得当前url的方法分享
Feb 14 PHP
php实现图片局部打马赛克的方法
Feb 11 PHP
PHP读书笔记_运算符详解
Jul 01 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
php解压缩zip和rar压缩包文件的方法
Jul 10 PHP
Laravel框架实现定时Task Scheduling例子
Oct 22 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
PHP设计模式之装饰器模式定义与用法简单示例
Aug 13 #PHP
PHP实现的ID混淆算法类与用法示例
Aug 10 #PHP
PHP+ajax实现二级联动菜单功能示例
Aug 10 #PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
Aug 10 #PHP
PHP实现的服务器一致性hash分布算法示例
Aug 09 #PHP
PHP检查端口是否可以被绑定的方法示例
Aug 09 #PHP
php对象工厂类完整示例
Aug 09 #PHP
You might like
东方红 - 来复式再生机的修复
2021/03/02 无线电
PHP开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
PHP请求Socket接口测试实例
2016/08/12 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
使用js获取地址栏中传递的值
2013/07/02 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
URL中“#” “?” &“”号的作用浅析
2017/02/04 Javascript
12个非常有用的JavaScript技巧
2017/05/17 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
2020/02/23 Javascript
token 机制和实现方式
2020/12/15 Javascript
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
python实现年会抽奖程序
2019/01/22 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
pytorch中的卷积和池化计算方式详解
2020/01/03 Python
Django REST 异常处理详解
2020/07/15 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
售后服务经理岗位职责范本
2014/02/22 职场文书
亮化工程实施方案
2014/03/17 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
只用Python就可以制作的简单词云
2021/06/07 Python
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技