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 相关文章推荐
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
php 分库分表hash算法
Nov 12 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
Jan 18 PHP
PHP仿盗链代码
Jun 03 PHP
基于php权限分配的实现代码
Apr 28 PHP
解析PHP实现多进程并行执行脚本
Jun 18 PHP
QQ互联一键登录审核不通过的解决方案
Sep 10 PHP
php实现webservice实例
Nov 06 PHP
php判断数组中是否存在指定键(key)的方法
Mar 17 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
Oct 24 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
Apr 26 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加密扩展库Mcrypt安装和实例
2013/11/10 PHP
yii操作cookie实例简介
2014/07/09 PHP
php版阿里云OSS图片上传类详解
2016/12/01 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
JQuery实现超链接鼠标提示效果的方法
2015/06/10 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
2017/02/10 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
基于JS实现网页中的选项卡(两种方法)
2017/06/16 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
2020/12/05 Javascript
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
17个Python小技巧分享
2015/01/23 Python
详解Python中的strftime()方法的使用
2015/05/22 Python
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
Python打印输出数组中全部元素
2018/03/13 Python
浅谈Python在pycharm中的调试(debug)
2018/11/29 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
Python 中Operator模块的使用
2021/01/30 Python
基于css3的属性transition制作菜单导航效果
2015/09/01 HTML / CSS
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
进程的查看和调度分别使用什么命令
2013/12/14 面试题
暑期培训随笔感言
2014/03/10 职场文书
会计核算科岗位职责
2014/03/19 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python