浅析php创建者模式


Posted in PHP onNovember 25, 2014

创建者模式:

在创建者模式中,客户端不再负责对象的创建与组装,而是把这个对象创建的责任交给其具体的创建者类,把组装的责任交给组装类,客户端支付对对象的调用,从而明确了各个类的职责。
应用场景:创建非常复杂,分步骤组装起来。

<?php

/**

 * 创建者模式

 */

//购物车

class ShoppingCart {

       //选中的商品

    private $_goods = array();

    //使用的优惠券

    private $_tickets = array();

       public function addGoods($goods) {

              $this->_goods[] = $goods;

       }

    public function addTicket($ticket) {

           $this->_tickets[] = $ticket;

    }

    public function printInfo() {

           printf("goods:%s, tickets:%sn", implode(',', $this->_goods), implode(',', $this->_tickets));

    }

}

//假如我们要还原购物车的东西,比如用户关闭浏览器后再打开时会根据cookie还原

$data = array(

       'goods' => array('衣服', '鞋子'),

       'tickets' => array('减10'),

);

//如果不使用创建者模式,则需要业务类里一步步还原购物车

// $cart = new ShoppingCart();

// foreach ($data['goods'] as $goods) {

//   $cart->addGoods($goods);

// }

// foreach ($data['tickets'] as $ticket) {

//   $cart->addTicket($ticket);

// }

// $cart->printInfo();

// exit;

//我们提供创建者类来封装购物车的数据组装

class CardBuilder {

       private $_card;

       function __construct($card) {

              $this->_card = $card;

       }

       function build($data) {

              foreach ($data['goods'] as $goods) {

                     $this->_card->addGoods($goods);

              }

              foreach ($data['tickets'] as $ticket) {

                     $this->_card->addTicket($ticket);

              }

       }

       function getCrad() {

              return $this->_card;

       }

}

$cart = new ShoppingCart();

$builder = new CardBuilder($cart);

$builder->build($data);

echo "after builder:n";

$cart->printInfo();

?>

可以看出,使用创建者模式对内部数据复杂的对象封装数据组装过程后,对外接口就会非常简单和规范,增加修改新数据项也不会对外部造成任何影响。

PHP 相关文章推荐
多php服务器实现多session并发运行
Oct 09 PHP
php下图片文字混合水印与缩略图实现代码
Dec 11 PHP
php 无限级数据JSON格式及JS解析
Jul 17 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
May 19 PHP
CI框架常用函数封装实例
Nov 21 PHP
Zend Framework动作控制器用法示例
Dec 09 PHP
PHP会话控制实例分析
Dec 24 PHP
PHP基于SimpleXML生成和解析xml的方法示例
Jul 17 PHP
php mysql数据库操作类(实例讲解)
Aug 06 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
Sep 30 PHP
零基础php编程好学吗
Oct 11 PHP
浅析php工厂模式
Nov 25 #PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 #PHP
浅析php单例模式
Nov 25 #PHP
PHP魔术方法__GET、__SET使用实例
Nov 25 #PHP
php字符串截取函数用法分析
Nov 25 #PHP
浅谈ThinkPHP的URL重写
Nov 25 #PHP
ThinkPHP独立分组使用的注意事项
Nov 25 #PHP
You might like
php引用传值实例详解学习
2013/11/06 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
PHP学习笔记之session
2018/05/06 PHP
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
js实现简单的验证码
2015/12/25 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
Python实现通过继承覆盖方法示例
2018/07/02 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
Python udp网络程序实现发送、接收数据功能示例
2019/12/09 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
运行时异常与一般异常有何异同?
2014/01/05 面试题
广州一家公司的.NET面试题
2016/06/11 面试题
武汉瑞得软件笔试题
2015/10/27 面试题
网站编辑求职信
2013/10/17 职场文书
送货司机岗位职责
2013/12/11 职场文书
小孩百日宴答谢词
2014/01/15 职场文书
信用社员工先进事迹材料
2014/02/04 职场文书
十佳护士先进事迹
2014/05/08 职场文书
道歉的话语大全
2015/05/12 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python