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自动获取目录下的模板的代码
Aug 08 PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 PHP
php smarty截取中文字符乱码问题?gb2312/utf-8
Nov 07 PHP
thinkphp实现图片上传功能分享
Mar 04 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
thinkphp文件处理类Dir.class.php的用法分析
Dec 08 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
Jan 04 PHP
php绘制圆形的方法
Jan 24 PHP
PHP文件缓存类实现代码
Oct 26 PHP
Yii2数据库操作常用方法小结
May 04 PHP
PHP 多任务秒级定时器的实现方法
May 13 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 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 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
2010/03/23 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
用javascript将数据导入Excel示例代码
2014/09/10 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
js实现tab选项卡切换功能
2017/01/13 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
用webAPI实现图片放大镜效果
2020/11/23 Javascript
Python中http请求方法库汇总
2016/01/06 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
python中如何打包用户自定义模块
2020/09/23 Python
python openssl模块安装及用法
2020/12/06 Python
详解解决jupyter不能使用pytorch的问题
2021/02/18 Python
一款纯css3制作的2015年元旦雪人动画特效教程
2014/12/29 HTML / CSS
创业计划书模版
2014/02/05 职场文书
简单租房协议书
2014/04/09 职场文书
个人作风建设总结
2014/10/23 职场文书
创业计划书之家教中心
2019/09/25 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书