当前位置:首页 > PHP教程 > php应用 > 列表

浅析php创建者模式

发布:smiling 来源: PHP粉丝网  添加日期:2021-04-30 15:44:28 浏览: 评论:0 

本文通过实例向我们展示了php设计模式中的创建者模式,及创建者模式所应用的场景,这里推荐给大家。

创建者模式:

在创建者模式中,客户端不再负责对象的创建与组装,而是把这个对象创建的责任交给其具体的创建者类,把组装的责任交给组装类,客户端支付对对象的调用,从而明确了各个类的职责。

应用场景:创建非常复杂,分步骤组装起来,代码如下:

  1. <?php 
  2. /** 
  3.  * 创建者模式 
  4.  */ 
  5. //购物车 
  6. class ShoppingCart { 
  7.        //选中的商品 
  8.     private $_goods = array(); 
  9.     //使用的优惠券 
  10.     private $_tickets = array(); 
  11.        public function addGoods($goods) { 
  12.               $this->_goods[] = $goods
  13.        } 
  14.     public function addTicket($ticket) { 
  15.            $this->_tickets[] = $ticket
  16.     } 
  17.     public function printInfo() { 
  18.            printf("goods:%s, tickets:%sn", implode(','$this->_goods), implode(','$this->_tickets)); 
  19.     } 
  20. //假如我们要还原购物车的东西,比如用户关闭浏览器后再打开时会根据cookie还原 
  21. $data = array
  22.        'goods' => array('衣服''鞋子'), 
  23.        'tickets' => array('减10'), 
  24. ); 
  25. //如果不使用创建者模式,则需要业务类里一步步还原购物车 
  26. // $cart = new ShoppingCart(); 
  27. // foreach ($data['goods'] as $goods) { 
  28. //   $cart->addGoods($goods); 
  29. // } 
  30. // foreach ($data['tickets'] as $ticket) { 
  31. //   $cart->addTicket($ticket); 
  32. // } 
  33. // $cart->printInfo(); 
  34. // exit; 
  35. //我们提供创建者类来封装购物车的数据组装 
  36. class CardBuilder { 
  37.        private $_card
  38.        function __construct($card) { 
  39.               $this->_card = $card
  40.        } 
  41.        function build($data) { 
  42.               foreach ($data['goods'as $goods) { 
  43.                      $this->_card->addGoods($goods); 
  44.               } 
  45.               foreach ($data['tickets'as $ticket) { 
  46.                      $this->_card->addTicket($ticket); 
  47.               } 
  48.        } 
  49.        function getCrad() { 
  50.               return $this->_card; 
  51.        } 
  52. $cart = new ShoppingCart(); 
  53. $builder = new CardBuilder($cart); 
  54. $builder->build($data); 
  55. echo "after builder:n"
  56. $cart->printInfo(); 
  57. ?> 

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

Tags: php创建者模式

分享到: