浅析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(2)
Oct 09 PHP
使用PHP和XSL stylesheets转换XML文档
Oct 09 PHP
php中使用explode查找某个字符是否存在的方法
Jul 12 PHP
如何使用php绘制在图片上的正余弦曲线
Jun 08 PHP
php使用qr生成二维码的示例分享
Jan 20 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
php根据数据id自动生成编号的实现方法
Oct 16 PHP
深入研究PHP中的preg_replace和代码执行
Aug 15 PHP
PHP示例演示发送邮件给某个邮箱
Apr 03 PHP
PHP使用DOM对XML解析处理操作示例
Jul 04 PHP
php+lottery.js实现九宫格抽奖功能
Jul 21 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
PHP中调用ASP.NET的WebService的代码
2011/04/22 PHP
thinkPHP的Html模板标签使用方法
2012/11/13 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
laravel 5.3中自定义加密服务的方案详解
2017/05/09 PHP
javascript 多级checkbox选择效果
2009/08/20 Javascript
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
jQuery ready函数滥用分析
2011/02/16 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
2014/07/18 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
详解vue-cli3多环境打包配置
2019/03/28 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
Python描述器descriptor详解
2015/02/03 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
Sanic框架路由用法实例分析
2018/07/16 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
关于Java finally的面试题
2016/04/27 面试题
毕业生的自我评价
2013/12/30 职场文书
质量承诺书范文
2014/03/27 职场文书
交警个人先进事迹材料
2014/05/11 职场文书
护林员个人总结
2015/03/04 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
员工给公司的建议书
2019/06/24 职场文书
MyBatis自定义SQL拦截器示例详解
2021/10/24 Java/Android
Python语言中的数据类型-序列
2022/02/24 Python