本文实例讲述了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设计模式之建造者模式定义与用法简单示例相关推荐

  1. 模式的模式:从设计模式到元模式

    最近的一两个月里,我一直在研究各类的模式:设计模式.架构模式.容器模式,以及其它一些特定领域的模式(如并行计算模式)等等. 经历了一番买书.读论文.读代码,我发现了以前对于模式的理解不够深刻.也因此呢 ...

  2. android 状态模式,Android编程设计模式之状态模式详解

    本文实例讲述了Android编程设计模式之状态模式.分享给大家供大家参考,具体如下: 一.介绍 状态模式中的行为是由状态来决定的,不同的状态下有不同的行为.状态模式和策略模式的结构几乎完全一样,但它们 ...

  3. 设计模式之外观模式php,PHP设计模式:外观模式

    前言 菜鸟教程对外观模式的描述是:外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口, ...

  4. python文件合法模式组合_python设计模式之组合模式

    最开始接触组合设计模式是在大话设计模式这本书中的案例,讲的是让你设计一个公司的组织架构,一个总公司下有人力资源部门,IT部门, 财务部门,还有广州分公司.深圳分公司,在分公司下也有IT部门和财务部门, ...

  5. 设计模式 原型模式_创新设计模式:原型模式

    设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...

  6. java并发编程:设计原则与模式_java编程设计模式一——策略模式

    定义: 策略模式定义了算法族,分别封装起来,让它们之间相互替代.此模式让算法的变化独立于使用算法的客户. 问题描述: 建立一个鸭子Duck的父类,它有很多子类,Duck都会游泳,但是有鸭子会飞,有的鸭 ...

  7. 【Mediator模式】C++设计模式——中介者模式

    中介者模式 一.设计流程探讨 二.模式介绍 三.代码实现     C++设计模式大全,23种设计模式合集详解-

  8. java 策略模式 促销_设计模式之策略模式

    0x01.定义与类型 定义:定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化不会影响到使用算法的用户. 从一系列里抽象出不变的部分 策略模式是将可变的部分从程序中抽象分离成算法 ...

  9. php装饰器模式 简书,设计模式——装饰器模式

    功能 无需改变原有对象的任何属性及其继承的情况下,动态为一个对象添加额外的职责. 实现 通过创建一个包装对象,也就是装饰来包裹真实的对象. 俺是一枚撸友,在这里借用LOL的余热,形象的将装饰器模式的实 ...

最新文章

  1. jquery 设置css样式
  2. HDOJ-3785 寻找大富翁(优先队列)
  3. 图集分配透明与不透明打包不到一起的错误
  4. 第三次握手为什么没有序列号_图解TCP三次握手与四次分手
  5. lin-cms-dotnetcore功能模块的设计
  6. 5120v2怎么配置web登陆_阿里企业邮箱如何配置和添加到第三个电子邮件客户端中?...
  7. 苹果平板怎么卸载软件_怎么很好的卸载流氓软件!
  8. Python 自定义模块
  9. 《软件工程导论》知识点期末复习整理
  10. pyhon下实现通过身份证获取归属地的方法
  11. IE首页被劫持,桌面图标异常的个人综合清理方法
  12. codesys工控机_CoDeSys
  13. 人工智能可以替代人类?今天要来说说人工智能与人类意识到底差距在哪里!...
  14. oracle新增字段时提示数据类型不正确
  15. 春节攻防战的战前谋划-电商必看
  16. DSA815频谱分析仪技术参数
  17. 微服务03 分布式搜索引擎 elasticsearch ELK kibana RestAPI 索引库 DSL查询 RestClient 黑马旅游
  18. Vue+Openlayer中测距测面和绘制点线面组件-LjMeasureDraw4326和LjMeasureDraw3857
  19. java环境变量user.home详解
  20. uniapp将聊天页面定位始终定位到最底部展示

热门文章

  1. 约瑟夫环(简单版)c语言解决
  2. [PyTorch] 深度学习框架PyTorch中的概念和函数
  3. matlab2c使用c++实现matlab函数系列教程-prod函数
  4. 串的复制——串传送指令MOVSB和方向标志位DF和CLD和REP
  5. Python3 练习笔记一
  6. Cesium基础使用介绍
  7. 解决百度 ueditor v1.4.3 编辑器上传图片失真的bug?
  8. 用ajax向处理页面传送路径问题解决方法
  9. 语音信号处理基础(五)——语音分帧与加窗
  10. [转载] 利用c/c++编写python模块