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 相关文章推荐
PHP 常用函数库和一些实用小技巧
Jan 01 PHP
PHP 函数语法介绍一
Jun 14 PHP
php记录日志的实现代码
Aug 08 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
PHP获取MSN好友列表类的实现代码
Jun 23 PHP
PHP创建word文档的方法(平台无关)
Mar 29 PHP
php获取excel文件数据
Apr 21 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
PHP里的$_GET数组介绍
Mar 22 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
May 14 PHP
PHP安全之register_globals的on和off的区别
Jul 23 PHP
通过PHP实现用户注册后邮箱验证激活
Nov 10 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
由php的call_user_func传reference引发的思考
2010/07/23 PHP
php visitFile()遍历指定文件夹函数
2010/08/21 PHP
关于尾递归的使用详解
2013/05/02 PHP
PHP分页效率终结版(推荐)
2013/07/01 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
2019/10/21 PHP
设定php简写功能的方法
2019/11/28 PHP
js使用函数绑定技术改变事件处理程序的作用域
2011/12/26 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
详解vue-cli3多环境打包配置
2019/03/28 Javascript
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Django的session中对于用户验证的支持
2015/07/23 Python
python web框架学习笔记
2016/05/03 Python
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
python提取包含关键字的整行数据方法
2018/12/11 Python
详解PyQt5信号与槽的几种高级玩法
2020/03/24 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
详细分析Python垃圾回收机制
2020/07/01 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
大专生的学习自我评价
2013/12/04 职场文书
高中自我鉴定
2013/12/20 职场文书
小学生作文批改评语
2014/12/25 职场文书
公司市场部岗位职责
2015/04/15 职场文书
写给媳妇的检讨书
2015/05/06 职场文书
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL