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绘制在图片上的正余弦曲线
Jun 08 PHP
解析PHP中ob_start()函数的用法
Jun 24 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
Jul 22 PHP
PHP eval函数使用介绍
Dec 08 PHP
destoon二次开发常用数据库操作
Jun 21 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
Sep 22 PHP
Yii 2.0在Grid中格式化时间方法示例
Jun 06 PHP
php对象工厂类完整示例
Aug 09 PHP
laravel-admin 实现给grid的列添加行数序号的方法
Oct 08 PHP
laravel框架上传图片实现实时预览功能
Oct 14 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 PHP
php 利用socket发送GET,POST请求的实例代码
Jul 04 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
各种战术和打法的原创者
2020/03/04 星际争霸
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
2016/05/09 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
2016/09/02 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
JavaScript根据json生成html表格的示例代码
2018/10/24 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
详解基于 Node.js 的轻量级云函数功能实现
2019/07/08 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
python运行时间的几种方法
2016/06/17 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
Python解决走迷宫问题算法示例
2018/07/27 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
python 将视频 通过视频帧转换成时间实例
2020/04/23 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
优秀女职工事迹材料
2014/02/06 职场文书
幼儿教师培训感言
2014/03/08 职场文书
员工入职担保书范文
2014/04/01 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
优秀团员事迹材料
2014/12/25 职场文书
客房领班岗位职责
2015/02/11 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
基于python实现银行管理系统
2021/04/20 Python