浅析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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
Jun 06 PHP
PHP设计模式之代理模式的深入解析
Jun 13 PHP
php函数间的参数传递(值传递/引用传递)
Sep 23 PHP
thinkphp中memcache的用法实例
Nov 29 PHP
PHP 正则表达式小结
Feb 12 PHP
深入浅析yii2-gii自定义模板的方法
Apr 26 PHP
详解PHP神奇又有用的Trait
Mar 25 PHP
Yii框架参数配置文件params用法实例分析
Sep 11 PHP
php libevent 功能与使用方法详解
Mar 04 PHP
基于PHP的登录和注册的功能的实现
Aug 06 PHP
基于ThinkPHP删除目录及目录文件函数
Oct 28 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
MVC模式的PHP实现
2006/10/09 PHP
php smarty truncate UTF8乱码问题解决办法
2014/06/13 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
2019/05/25 PHP
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
用JavaScript和jQuery实现瀑布流
2017/03/19 Javascript
js使用原型对象(prototype)需要注意的地方
2017/08/28 Javascript
浅谈mint-ui 填坑之路
2017/11/06 Javascript
vue-cli webpack2项目打包优化分享
2018/02/07 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
2019/05/21 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
基于vuex实现购物车功能
2021/01/10 Vue.js
python中常用检测字符串相关函数汇总
2015/04/15 Python
Python 中开发pattern的string模板(template) 实例详解
2017/04/01 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
Python中的元组介绍
2019/01/28 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
python解包用法详解
2021/02/17 Python
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
运动会广播稿200字
2014/01/15 职场文书
医药销售求职信范文
2014/02/01 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang
Python破解极验滑动验证码详细步骤
2021/05/21 Python
Win11怎么启动任务管理器?Win11启动任务管理器的几种方法
2021/11/23 数码科技