浅析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 购物车的例子
May 04 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
Aug 01 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
Aug 05 PHP
php下利用curl判断远程文件是否存在的实现代码
Oct 08 PHP
PHP中读写文件实现代码
Oct 20 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
Jan 14 PHP
php中$_POST与php://input的区别实例分析
Jan 07 PHP
合格的PHP程序员必备技能
Nov 13 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
PHP使用第三方即时获取物流动态实例详解
Apr 27 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
May 20 PHP
php策略模式简单示例分析【区别于工厂模式】
Sep 25 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在特殊字符前加斜杠的实现代码
2011/07/17 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
验证用户是否修改过页面的数据的实现方法
2008/09/26 Javascript
JS input 数字验证代码
2009/07/30 Javascript
js函数的延迟加载实现代码
2012/10/11 Javascript
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
Javascript的表单验证-揭开正则表达式的面纱
2016/03/18 Javascript
Javascript json object 与string 相互转换的简单实现
2016/09/27 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
js实现鼠标移动到图片产生遮罩效果
2017/10/21 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
python encode和decode的妙用
2009/09/02 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
2018/10/30 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
什么是索引指示器
2012/08/20 面试题
师范生自我鉴定范文
2013/10/05 职场文书
4s客服专员岗位职责
2013/12/01 职场文书
小学毕业感言150字
2014/02/05 职场文书
经管应届生求职信范文
2014/05/18 职场文书
外贸业务员求职信
2014/06/16 职场文书
公司授权委托书范本
2014/09/18 职场文书
报到证办理个人委托书
2014/10/06 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书
工会工作个人总结
2015/03/03 职场文书
八月一日观后感
2015/06/10 职场文书
初中班长竞选稿
2015/11/20 职场文书