浅析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 23 PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 PHP
PHP查询网站的PR值
Oct 30 PHP
PHP三元运算的2种写法代码实例
May 12 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
Mar 03 PHP
php生成数字字母的验证码图片
Jul 14 PHP
php中关于长度计算容易混淆的问题分析
May 27 PHP
浅谈PHP Cookie处理函数
Jun 10 PHP
PHP实现数组array转换成xml的方法
Jul 19 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
Oct 08 PHP
PHP+Ajax异步带进度条上传文件实例
Nov 01 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
Mar 30 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
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
javascript(jquery)利用函数修改全局变量的代码
2009/11/02 Javascript
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
jquery高效反选具体实现
2013/05/05 Javascript
jQuery实现单行文字间歇向上滚动源代码
2013/06/02 Javascript
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
JS小数运算出现多为小数问题的解决方法
2016/06/02 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
vue 组件简介
2020/07/31 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
在Python程序中操作文件之flush()方法的使用教程
2015/05/24 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
python设置环境变量的作用和实例
2019/07/09 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
python利用opencv实现颜色检测
2021/02/23 Python
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
全球最大的游戏市场:G2A
2018/07/05 全球购物
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
医学院毕业生自荐信
2013/11/08 职场文书
中学生差生评语
2014/01/30 职场文书
教师考核评语
2014/04/28 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
发布会邀请函
2015/01/31 职场文书
小学科学课教学反思
2016/02/23 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
使用HttpSessionListener监听器实战
2022/03/17 Java/Android