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 相关文章推荐
ExtJS与PHP、MySQL实现存储的方法
Apr 02 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
phpmyadmin中禁止外网使用的方法
Nov 04 PHP
php实现的ping端口函数实例
Nov 12 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
May 12 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
Apr 23 PHP
PHP+Ajax异步带进度条上传文件实例
Nov 01 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
Dec 15 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
PHP中localeconv()函数的用法
Mar 26 PHP
实例讲解PHP表单
Jun 10 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
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
JS 表单验证大全
2011/11/23 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
js渐变显示渐变消失示例代码
2013/08/01 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
jquery SweetAlert插件实现响应式提示框
2015/08/18 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
2018/09/30 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
jquery实现下载图片功能
2019/07/18 jQuery
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
用Python编写生成树状结构的文件目录的脚本的教程
2015/05/04 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
Pytorch 多维数组运算过程的索引处理方式
2019/12/27 Python
python实现实时视频流播放代码实例
2020/01/11 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
三十年同学聚会感言
2015/07/30 职场文书
什么是SOLID
2022/03/24 Javascript
httpclient调用远程接口的方法
2022/08/14 Java/Android