浅析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实现分页的一个示例
Oct 09 PHP
修改了一个很不错的php验证码(支持中文)
Feb 14 PHP
php入门小知识
Mar 24 PHP
php access 数据连接与读取保存编辑数据的实现代码
May 12 PHP
php cookies中删除的一般赋值方法
May 07 PHP
实现PHP多线程异步请求的3种方法
Jan 17 PHP
php stripslashes和addslashes的区别
Feb 03 PHP
PHP开发微信支付的代码分享
May 25 PHP
php实例分享之html转为rtf格式
Jun 02 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
Oct 30 PHP
Yii使用技巧大汇总
Dec 29 PHP
PHP实现无限分类的实现方法
Nov 14 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
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
javascript编程起步(第六课)
2007/01/10 Javascript
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
2016/01/19 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
深入浅析JS中的严格模式
2018/06/04 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
python实现发送邮件及附件功能
2021/03/02 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
python根据时间获取周数代码实例
2019/09/30 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
python字符串判断密码强弱
2020/03/18 Python
使用jupyter notebook直接打开.md格式的文件
2020/04/10 Python
Python3+Django get/post请求实现教程详解
2021/02/16 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
菲律宾优惠券网站:MetroDeal
2019/04/12 全球购物
公司财务工作总结的自我评价
2013/11/23 职场文书
英语系本科生求职信范文
2013/12/18 职场文书
企业读书活动总结
2014/06/30 职场文书
2016思想纪律作风整顿心得体会
2016/01/23 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
MySQL分库分表与分区的入门指南
2021/04/22 MySQL