繼續分享設計模式的公開課,這是第三篇建立型模式之建立者模式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