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文件下载类
Dec 06 PHP
php和javascript之间变量的传递实现代码
Dec 19 PHP
php中cookie的使用方法
Mar 29 PHP
php url路由入门实例
Apr 23 PHP
thinkphp使用phpmailer发送邮件的方法
Nov 24 PHP
smarty内置函数capture用法分析
Jan 22 PHP
php 使用array函数实现分页
Feb 13 PHP
使用PHP编写发红包程序
Jul 22 PHP
Joomla调用系统自带编辑器的实现方法
May 05 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
php格式文件打开的四种方法
Feb 24 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 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
项目中应用Redis+Php的场景
2016/05/22 PHP
PHP7匿名类用法分析
2016/09/26 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
php实现微信原生支付(扫码支付)功能
2018/05/30 PHP
javascript 鼠标滚轮事件
2009/04/09 Javascript
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
javascript面向对象之访问对象属性的两种方式分析
2015/01/13 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
[02:22]2018DOTA2亚洲邀请赛VG赛前采访
2018/04/03 DOTA
python文件和目录操作方法大全(含实例)
2014/03/12 Python
Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
2014/10/23 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
Python银行系统实战源码
2019/10/25 Python
Python sorted对list和dict排序
2020/06/09 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
写好自荐信的要点
2013/11/06 职场文书
年度考核自我鉴定
2013/11/09 职场文书
部队学习十八大感言
2014/01/11 职场文书
应聘英语教师求职信
2014/04/24 职场文书
父亲婚礼答谢词
2015/01/04 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
重阳节简报
2015/07/20 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL
基于Python实现nc批量转tif格式
2022/08/14 Python
table不让td文字溢出操作方法
2022/12/24 HTML / CSS