浅析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&amp;MYSQL分页原理及实现
Jan 02 PHP
PHP array 的加法操作代码
Jul 24 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
Apr 12 PHP
php编写一个简单的路由类
Apr 13 PHP
浅析php变量修饰符static的使用
Jun 28 PHP
关于php内存不够用的快速解决方法
Oct 26 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
PHP之sprintf函数用法详解
Nov 12 PHP
php数组分页实现方法
Apr 30 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
Jun 30 PHP
Laravel下生成验证码的类
Nov 15 PHP
YII分模块加载路由的实现方法
Oct 01 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中Socket创建与监听实现方法
2015/01/05 PHP
php简单获取复选框值的方法
2016/05/11 PHP
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
js表头排序实现方法
2015/01/16 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
2016/09/08 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
浅析PEP572: 海象运算符
2019/10/15 Python
python字符串反转的四种方法详解
2019/12/02 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
后勤服务中心总经理工作职责
2014/03/03 职场文书
个人自荐材料
2014/05/23 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
安全生产先进个人事迹材料
2014/12/30 职场文书
酒店员工手册范本
2015/05/14 职场文书
家长会主持词开场白
2015/05/29 职场文书
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技