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数组中删除元素的实现代码
Jun 22 PHP
深入解析php之apc
May 15 PHP
php inc文件使用的风险和注意事项
Nov 12 PHP
PHP中strlen()和mb_strlen()的区别浅析
Jun 19 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
Aug 20 PHP
php删除指定目录的方法
Apr 03 PHP
php搜索文件程序分享
Oct 30 PHP
PHP仿微信多图片预览上传实例代码
Sep 13 PHP
Yii2创建多界面主题(Theme)的方法
Oct 08 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 PHP
PHP操作Redis常用命令的实例详解
Dec 23 PHP
PHP7新特性
Mar 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
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
js 获取、清空input type="file"的值示例代码
2014/02/19 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
2019/07/19 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
2019/09/09 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
在antd Table中插入可编辑的单元格实例
2020/10/28 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
Python 自动化表单提交实例代码
2017/06/08 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
解决Pycharm 运行后没有输出的问题
2021/02/05 Python
Python图像处理之膨胀与腐蚀的操作
2021/02/07 Python
python实现银行账户系统
2021/02/22 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
2021/03/04 Python
利用SVG和CSS3来实现一个炫酷的边框动画
2015/07/22 HTML / CSS
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
Trunki英国官网:儿童坐骑式行李箱
2017/05/30 全球购物
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
餐饮业的创业计划书范文
2013/12/26 职场文书
投标单位介绍信
2014/01/09 职场文书
酒店员工检讨书
2014/02/18 职场文书
暑期培训随笔感言
2014/03/10 职场文书
《赶海》教学反思
2014/04/20 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
Python实现排序方法常见的四种
2021/07/15 Python