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 转换字符串编码 iconv与mb_convert_encoding的区别说明
Nov 10 PHP
php数组的概述及分类与声明代码演示
Feb 26 PHP
PHP 中提示undefined index如何解决(多种方法)
Mar 16 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
Mar 18 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
Laravel日志用法详解
Oct 09 PHP
Thinkphp框架中D方法与M方法的区别
Dec 23 PHP
php使用include 和require引入文件的区别
Feb 16 PHP
PHP实现创建微信自定义菜单的方法示例
Jul 14 PHP
实例讲解通过​PHP创建数据库
Jan 20 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
May 14 PHP
关于PHP求解三数之和问题详析
Nov 09 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
PL-880隐藏功能
2021/03/01 无线电
php多任务程序实例解析
2014/07/19 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
修复ie8&chrome下window的resize事件多次执行
2011/10/20 Javascript
一个简单的瀑布流效果(主体形式自写)
2013/05/27 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
详解webpack4之splitchunksPlugin代码包分拆
2018/12/04 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
javascript实现获取中文汉字拼音首字母
2020/05/19 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
Vant picker 多级联动操作
2020/11/02 Javascript
[04:11]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/01/30 DOTA
Python2.x与Python3.x的区别
2016/01/14 Python
Python Grid使用和布局详解
2018/06/30 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
多个python文件调用logging模块报错误
2020/02/12 Python
Python中的整除和取模实例
2020/06/03 Python
浅谈Python 参数与变量
2020/06/20 Python
Python wordcloud库安装方法总结
2020/12/31 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
美国批发零售网站:GearXS
2016/07/26 全球购物
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
高中生操行评语
2014/04/25 职场文书
项目建议书怎么写
2014/05/15 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
一次线上mongo慢查询问题排查处理记录
2022/03/18 MongoDB
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS