浅析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使之能同时支持GIF和JPEG
Oct 09 PHP
用PHP制作静态网站的模板框架(二)
Oct 09 PHP
PHP产生随机字符串函数
Dec 06 PHP
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
Discuz Uchome ajaxpost小技巧
Jan 04 PHP
php实现监听事件
Nov 06 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
Mar 17 PHP
PHP获取指定月份第一天和最后一天的方法
Jul 18 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
Aug 07 PHP
PHP substr()函数参数解释及用法讲解
Nov 23 PHP
PHP simplexml_load_string()函数实例讲解
Feb 03 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 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
FCKeditor添加自定义按钮
2008/03/27 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
Array对象方法参考
2006/10/03 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
事件绑定之小测试  onclick &amp;&amp; addEventListener
2011/07/31 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
js设置function参数默认值(适合没有传参情况)
2014/02/24 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
angularjs请求数据的方法示例
2019/08/06 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
举例讲解Python中的算数运算符的用法
2015/05/13 Python
python基于multiprocessing的多进程创建方法
2015/06/04 Python
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
在校生党员自我评价
2013/09/25 职场文书
运动会广播稿200字
2014/01/15 职场文书
计算机应届毕业生自荐信范文
2014/02/23 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
高中运动会广播稿
2015/08/19 职场文书
Python竟然能剪辑视频
2021/05/25 Python
vue实现登陆页面开发实践
2022/05/30 Vue.js
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python