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 相关文章推荐
写一个用户在线显示的程序
Oct 09 PHP
一个颜色轮换的简单例子
Oct 09 PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
Sep 30 PHP
解析百度搜索结果link?url=参数分析 (全)
Oct 09 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
Apr 13 PHP
PHP基于yii框架实现生成ICO图标
Nov 13 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 PHP
在laravel中使用Symfony的Crawler组件分析HTML
Jun 19 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 PHP
PHP 扩展Memcached命令用法实例总结
Jun 04 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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
Open and Print a Word Document
2007/06/15 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
详解javascript 变量提升(Hoisting)
2019/03/12 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
JavaScript中的this妙用实例分析
2020/05/09 Javascript
Python中的并发编程实例
2014/07/07 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
2019/02/19 Python
python 导入数据及作图的实现
2019/12/03 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
关联、聚合(Aggregation)以及组合(Composition)的区别
2012/02/29 面试题
JAVA程序设计笔试题面试题一套
2015/07/28 面试题
土木工程专业个人求职信
2013/12/05 职场文书
孝敬父母的活动方案
2014/08/31 职场文书
解除劳动合同协议书
2014/09/17 职场文书
法人代表证明书
2014/09/18 职场文书
初三毕业感言
2015/07/31 职场文书
详解python字符串驻留技术
2021/05/21 Python
使用Redis做预定库存缓存功能
2022/04/02 Redis
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android