浅析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编码规范-php coding standard
Mar 16 PHP
PHP程序员编程注意事项
Apr 10 PHP
PHP 图像尺寸调整代码
May 26 PHP
PHP提取字符串中的图片地址[正则表达式]
Nov 12 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
Jun 20 PHP
使用php记录用户通过搜索引擎进网站的关键词
Feb 13 PHP
PHP魔术方法的使用示例
Jun 23 PHP
一波PHP中cURL库的常见用法代码示例
May 06 PHP
php上传图片类及用法示例
May 11 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
Nov 25 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
Jun 04 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 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中soap的用法实例
2014/10/24 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
JS 树形递归实例代码
2010/05/18 Javascript
一起来写段JS drag拖动代码
2010/12/09 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
2019/06/10 jQuery
js实现贪吃蛇小游戏
2019/10/29 Javascript
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
Python中DJANGO简单测试实例
2015/05/11 Python
python线程、进程和协程详解
2016/07/19 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
python Django 创建应用过程图示详解
2019/07/29 Python
简单的命令查看安装的python版本号
2020/08/28 Python
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
《夜晚的实验》教学反思
2014/02/19 职场文书
校园安全演讲稿
2014/05/09 职场文书
大学生职业生涯规划大赛作品(精品)
2014/09/17 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
区长工作作风个人整改措施
2014/10/01 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
银行员工考核评语
2014/12/31 职场文书
奖学金感谢信
2015/01/21 职场文书
小学语文新课改心得体会
2016/01/22 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
Golang二维切片初始化的实现
2021/04/08 Golang