浅析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 相关文章推荐
使用adodb lite解决问题
Dec 31 PHP
php的access操作类
Apr 09 PHP
PHP 网页过期时间的控制代码
Jun 29 PHP
超小PHP小马小结(方便查找后门的朋友)
May 05 PHP
PHP JS Ip地址及域名格式检测代码
Sep 27 PHP
PHP 验证登陆类分享
Mar 13 PHP
yii数据库的查询方法
Dec 28 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
Oct 31 PHP
php微信公众平台开发(四)回复功能开发
Dec 06 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
Mar 04 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
php微信开发之关注事件
Jun 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
深入PHP变量存储的详解
2013/06/13 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
javascript工具库代码
2012/03/29 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
js获取域名的方法
2015/01/27 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
修改js confirm alert 提示框文字的简单实例
2016/06/10 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
python实现kMeans算法
2017/12/21 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
python之拟合的实现
2019/07/19 Python
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
如何利用cmp命令比较文件
2013/09/23 面试题
高级Java程序员面试题
2016/06/23 面试题
期末考试动员演讲稿
2014/01/10 职场文书
社保委托书怎么写
2014/08/02 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
超市主管竞聘书
2015/09/15 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
实习报告怎么写
2019/06/20 职场文书