優才公開課筆記:php設計模式 (三)之建立者模式

繼續分享設計模式的公開課,這是第三篇建立型模式之建立者模式php

設計模式的通常介紹在第一篇文章講了,不瞭解的能夠先看看。設計模式

建立者模式:
在建立者模式中,客戶端再也不負責對象的建立與組裝,而是把這個對象建立的責任交給其具體的建立者類,把組裝的責任交給組裝類,客戶端支付對對象的調用,從而明確了各個類的職責。
應用場景:建立很是複雜,分步驟組裝起來。瀏覽器

<?php
/**
 * 優才網公開課示例代碼
 *
 * 建立者模式
 *
 * @author 優才網全棧工程師教研組
 * @see http://www.ucai.cn
 */

//購物車
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();

?>

能夠看出,使用建立者模式對內部數據複雜的對象封裝數據組裝過程後,對外接口就會很是簡單和規範,增長修改新數據項也不會對外部形成任何影響。cookie

想了解更多,來聽公開課吧:http://www.ucai.cn/train?f=17ui

相關文章
相關標籤/搜索