浅析php创建者模式

创建者模式:

在创建者模式中,客户端不再负责对象的创建与组装,而是把这个对象创建的责任交给其具体的创建者类,把组装的责任交给组装类,客户端支付对对象的调用,从而明确了各个类的职责。
应用场景:创建非常复杂,分步骤组装起来。

代码如下:

<?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();
?>

可以看出,使用创建者模式对内部数据复杂的对象封装数据组装过程后,对外接口就会非常简单和规范,增加修改新数据项也不会对外部造成任何影响。

(0)

相关推荐

  • php单例模式实现(对象只被创建一次)

    单例类至少拥有以下三种公共元素: 必须拥有一个构造函数,并且必须被标记为private.    拥有一个保存类的实例的静态成员变量.    拥有一个访问这个实例的公共的静态方法 具体使用方面,我在下面php实例中注释的很清楚: 复制代码 代码如下: <?php /**  * by www.phpddt.com  */ class Mysql{  //该属性用来保存实例  private static $conn;  //构造函数为private,防止创建对象  private function

  • 不错的一篇面向对象的PHP开发模式(简写版)

    我看到有人在批判PHP,什么这地方不好用,那地方不好用的.其实严格地说起来,没有一门语言好用,也没有一门语言有一个严格的标准,凡事都有一个发展的过程,我们总不能等这些标准呀什么的都很完善了再用吧?我觉得不管用什么语言,写程序都要靠自己,一个程序员要有好的风格,思路等等.最近我在整理一些资料,现在发出一些,希望大家多提意见,多多扶持啊哈 ====================================== 面向对象的PHP开发模式(待完善中...) ====================

  • 浅析php创建者模式

    创建者模式: 在创建者模式中,客户端不再负责对象的创建与组装,而是把这个对象创建的责任交给其具体的创建者类,把组装的责任交给组装类,客户端支付对对象的调用,从而明确了各个类的职责. 应用场景:创建非常复杂,分步骤组装起来. 复制代码 代码如下: <?php /**  * 创建者模式  */ //购物车 class ShoppingCart {        //选中的商品     private $_goods = array();     //使用的优惠券     private $_tick

  • 浅析php工厂模式

    本系列文章来总结一下设计模式在PHP中的应用,这是第二篇创建型模式之工厂模式. 设计模式的一般介绍在第一篇文章讲了,这里就不重复. 工厂模式 实现:定义一个用于创建对象的接口,让子类决定实例化哪一个类. 应用场景:众多子类并且会扩充.创建方法比较复杂. 工厂模式分为三种:简单工厂.工厂方法.抽象工厂 , 三种工厂的区别是,抽象工厂由多条产品线,而工厂方法只有一条产品线,是抽象工厂的简化.而工厂方法和简单工厂相对,大家初看起来好像工厂方法增加了许多代码但是实现的功能和简单工厂一样.但本质是,简单工

  • Java设计模式之创建者模式简介

    Java的创建者模式与工厂模式有点类似,不过关注点不同.工厂模式往往只关心你要的是什么,而不关心这个东西的具体细节是什么.相对而言创建模式则是关心这个东西的具体细节的创建.拿创建人物来说,我们关心的不仅是创建一个人物,还要关心他的性别,肤色和名字,则可以使用创建者模式. 程序实例如下所示: package builder; /** * * DOC 种族角色 * */ public class Race { private String name;// 名字 private String skin

  • 浅析Activity启动模式

    前言 平常我们启动活动的时候就是直接startActivity或许并没有注意活动的启动模式,默认情况下都是以默认的启动模式启动.但启动模式有时候是比较重要的.例如一个活动你想他只启动一次不要有多个实例,那么你可能需要把他设置为singleTask模式.所以有必要了解一下这一些启动模式.同时要注意一下,启动模式≠启动方式,启动方式是指显示启动和隐式启动,不要混淆,显示启动和隐式启动后续我会有专门的文章讲解. 关于任务栈简介 要了解启动模式,首先要了解一下关于任务栈的概念.关于任务栈的实现原理等我在

  • 浅析php原型模式

    原型模式: 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. 应用场景: 类的资源非常多.性能和安全要求,一般和工厂方法结合使用. 复制代码 代码如下: <?php /**  * 原型模式  */ //声明一个克隆自身的接口 interface Prototype {     function copy(); }   //产品要实现克隆自身的操作 class Student implements Prototype {        //简单起见,这里没有使用get set  

  • 浅析.net策略模式

    对于策略模式的理解:当一个业务有多种需求时候,在某个时候需要使用不同的方式来计算结果.这时候不同的方式可以理解为不同的策略来解决同样的问题. 例如:商场收银系统计算价格,1:正常计算 2:商品打折计算,3:满300减100等方式.就可以按三种策略来处理需求. 简单的说:策略模式就是用来封装算法的,但在实践中,我们发现可以用他来封装几乎任何类型的规则,只要在分析过程中听到需要在不同的时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性. 复制代码 代码如下: using System

  • 深入浅析Django MTV模式

    MVC模式 MVC, 全名Model View Controller, 是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model), 视图(View)和控制器(Controller), 具有耦合性低,重用性高.生命周期成本低等优点. MVT模式 模型:数据存储层,处理与数据相关的所有事务,例如如何存取.如何验证有效性.包含哪些行为以及数据之间的关系等.负责业务对象与数据库的对象(orm). 模板:表现层,处理与表现相关的决定,例如如何在页面或其他类型的文档中进行显示. Dja

  • 浅析php单例模式

    本系列文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式之单例模式. 一.设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用.容易被他人理解的.可靠的代码设计经验的总结. 设计模式不是Java的专利,我们用面向对象的方法在PHP里也能很好的使用23种设计模式. 那么我们常说的架构.框架和设计模式有什么关系呢? 架构是一套体系结构,是项目的整体解决方案:框架是可供复用的半成品软件,是具体程序代码.架构一般会涉及到采用什么样的框架来加速和优化某部分问题的解决,而好的

  • 详解Java实践之建造者模式

    目录 一.前言 二.开发环境 三.建造者模式介绍 四.案例场景模拟 4.1.场景模拟工程 4.2.场景简述 4.2.1.物料接口 4.2.2.吊顶(ceiling) 4.2.3.涂料(coat) 4.2.4.地板(floor) 4.2.5.地砖(tile) 五.代码实现 5.1.工程结构 5.2.ifelse实现需求 5.3. 测试验证 六.建造者模式重构代码 6.1.工程结构 6.2.代码实现 6.2.1.定义装修包接口 6.2.2.装修包实现 6.2.3.建造者方法 6.3.测试验证 七.总

  • .Net设计模式之建造者、生成器模式(Builder)

    一.动机(Motivation) 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定.如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变? 二.意图(Intent) 将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.——<设计模式>GoF 三.结构(

随机推荐