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 相关文章推荐
phpMyAdmin 安装教程全攻略
Mar 19 PHP
PHP生成Flash动画的实现代码
Mar 12 PHP
PHP遍历二维数组的代码
Apr 22 PHP
hadoop中一些常用的命令介绍
Jun 19 PHP
php中unserialize返回false的解决方法
Sep 22 PHP
PHP+MySQL之Insert Into数据插入用法分析
Sep 27 PHP
Joomla语言翻译类Jtext用法分析
May 05 PHP
PHP自定义多进制的方法
Nov 03 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
Feb 15 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
PHP中isset、empty的用法与区别示例详解
Nov 05 PHP
Laravel的加密解密与哈希实例讲解
Mar 24 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
apache php mysql开发环境安装教程
2016/07/28 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
锋利的jQuery 第三章章节总结的例子
2010/03/23 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
js动态切换图片的方法
2015/01/20 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
浅析微信扫码登录原理(小结)
2018/10/29 Javascript
详解搭建一个vue-cli的移动端H5开发模板
2020/01/17 Javascript
Python查找第n个子串的技巧分享
2018/06/27 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
单身旅行者的单身假期:Just You
2018/04/08 全球购物
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
应届毕业生个人求职信范文
2014/01/29 职场文书
超市促销活动方案
2014/03/05 职场文书
会计岗位职责范本
2014/03/07 职场文书
环保专项行动方案
2014/05/12 职场文书
副处级干部考察材料
2014/05/17 职场文书
专题组织生活会方案
2014/06/15 职场文书
质量保证书格式模板
2015/02/27 职场文书
2015年度党员自我评价范文
2015/03/03 职场文书
开工典礼致辞
2015/07/29 职场文书
一年级语文教学随笔
2015/08/14 职场文书
js实现模拟购物商城案例
2021/05/18 Javascript
详解Redis瘦身指南
2021/05/26 Redis
React自定义hook的方法
2022/06/25 Javascript