浅析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读取30天之内的根据算法排序的代码
Apr 06 PHP
PHP 页面编码声明方法详解(header或meta)
Mar 12 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
Mar 26 PHP
php获取本地图片文件并生成xml文件输出具体思路
Apr 27 PHP
Yii使用CLinkPager分页实例详解
Jul 23 PHP
php中strtotime函数用法详解
Nov 15 PHP
php中实现可以返回多个值的函数实例
Mar 21 PHP
apache和PHP如何整合在一起
Oct 12 PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 PHP
Laravel5权限管理方法详解
Jul 26 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
Oct 23 PHP
laravel 验证错误信息到 blade模板的方法
Sep 29 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 access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
D3.js实现简洁实用的动态仪表盘的示例
2018/04/04 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
解决Layui数据表格显示无数据提示的问题
2019/11/14 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
一些Python中的二维数组的操作方法
2015/05/02 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
Python全排列操作实例分析
2018/07/24 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
用python写爬虫简单吗
2020/07/28 Python
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
C和C++经典笔试题附答案解析
2014/08/18 面试题
如何理解委托
2012/01/06 面试题
C#实现启动一个进程
2016/10/01 面试题
C#可否对内存进行直接的操作
2015/02/26 面试题
花卉与景观设计系大学生求职信
2013/10/01 职场文书
中餐厅主管的职责范文
2014/02/04 职场文书
青年文明号复核材料
2014/02/11 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
合作协议书范本
2014/10/25 职场文书
自主招生自荐信怎么写
2015/03/24 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
css背景和边框标签实例详解
2021/05/21 HTML / CSS
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle
JavaScript实现栈结构详细过程
2021/12/06 Javascript