婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP設(shè)計(jì)模式(三)建造者模式Builder實(shí)例詳解【創(chuàng)建型】

PHP設(shè)計(jì)模式(三)建造者模式Builder實(shí)例詳解【創(chuàng)建型】

熱門標(biāo)簽:南寧電話外呼系統(tǒng)線路 重慶外呼電銷系統(tǒng)多少錢 咸陽電銷 邢臺400電話辦理 辦理400電話哪家好點(diǎn) 正規(guī)電銷機(jī)器人系統(tǒng) 南京3D地圖標(biāo)注 濟(jì)源百應(yīng)電銷機(jī)器人聯(lián)系方式 嘟嘟云外呼系統(tǒng)

本文實(shí)例講述了PHP設(shè)計(jì)模式:建造者模式Builder。分享給大家供大家參考,具體如下:

1. 概述

       在軟件開發(fā)的過程中,當(dāng)遇到一個(gè)“復(fù)雜的對象”的創(chuàng)建工作,該對象由一定各個(gè)部分的子對象用一定的算法構(gòu)成,由于需求的變化,復(fù)雜對象的各個(gè)部分經(jīng)常面臨劇烈的變化,但將它們組合在一起的算法相對穩(wěn)定。

       例子1:買肯德基

       典型的兒童餐包括一個(gè)主食,一個(gè)輔食,一杯飲料和一個(gè)玩具(例如漢堡、炸雞、可樂和玩具車)。這些在不同的兒童餐中可以是不同的,但是組合成兒童餐的過程是相同的。

       客戶端:顧客,想去買一套套餐(這里面包括漢堡,可樂,薯?xiàng)l),可以有1號和2號兩種套餐供顧客選擇。
       指導(dǎo)者角色:收銀員。知道顧客想要買什么樣的套餐,并告訴餐館員工去準(zhǔn)備套餐。
       建造者角色:餐館員工。按照收銀員的要求去準(zhǔn)備具體的套餐,分別放入漢堡,可樂,薯?xiàng)l等。
       產(chǎn)品角色:最后的套餐,所有的東西放在同一個(gè)盤子里面。

        例子2:計(jì)算工資:工資的計(jì)算一般是:底薪+獎(jiǎng)金-稅。但底薪分為一級8000、二級6000、三級4000三個(gè)等級。根據(jù)崗位不同獎(jiǎng)金的發(fā)放也不一樣,管理及日常事務(wù)處理崗位(A類)每月根據(jù)領(lǐng)導(dǎo)及同事間的評議得分計(jì)算獎(jiǎng)金,銷售崗位(B類)則根據(jù)銷售額發(fā)放提成。稅金則根據(jù)獎(jiǎng)金和底薪的數(shù)額進(jìn)行計(jì)算。由此看出該工資的計(jì)算方式是比較穩(wěn)定的構(gòu)建算法,但對工資的每一部分都會根據(jù)不同的情況產(chǎn)生不同的算法,如何將客戶端與變化巨烈的底薪、獎(jiǎng)金和稅金計(jì)算方式分離呢,這也比較適合用建造者模式。

2 . 問題

我們?nèi)绾螒?yīng)對這種變化,如何提供一種“封裝機(jī)制”來隔離“復(fù)雜對象的各個(gè)部”的變化,從而保持系統(tǒng)中的“穩(wěn)定構(gòu)建算法”而不隨需求的變化而變化?

3. 解決方案

建造者模式: 將一個(gè)復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。

4. 適用性

在以下情況使用Builder模式

•當(dāng)創(chuàng)建復(fù)雜對象的算法應(yīng)該獨(dú)立于該對象的組成部分以及它們的裝配方式時(shí)。

•當(dāng)構(gòu)造過程必須允許被構(gòu)造的對象有不同的表示時(shí)。

5. 結(jié) 構(gòu)

此模式結(jié)構(gòu)如下頁上圖所示。

6. 構(gòu)建模式的組成

• 抽象建造者角色(Builder):為創(chuàng)建一個(gè)Product對象的各個(gè)部件指定抽象接口,以規(guī)范產(chǎn)品對象的各個(gè)組成成分的建造。一般而言,此角色規(guī)定要實(shí)現(xiàn)復(fù)雜對象的哪些部分的創(chuàng)建,并不涉及具體的對象部件的創(chuàng)建。

• 具體建造者(ConcreteBuilder)

1)實(shí)現(xiàn)Builder的接口以構(gòu)造和裝配該產(chǎn)品的各個(gè)部件。即實(shí)現(xiàn)抽象建造者角色Builder的方法。

2)定義并明確它所創(chuàng)建的表示,即針對不同的商業(yè)邏輯,具體化復(fù)雜對象的各部分的創(chuàng)建

3)  提供一個(gè)檢索產(chǎn)品的接口

4)   構(gòu)造一個(gè)使用Builder接口的對象即在指導(dǎo)者的調(diào)用下創(chuàng)建產(chǎn)品實(shí)例

指導(dǎo)者(Director):調(diào)用具體建造者角色以創(chuàng)建產(chǎn)品對象的各個(gè)部分。指導(dǎo)者并沒有涉及具體產(chǎn)品類的信息,真正擁有具體產(chǎn)品的信息是具體建造者對象。它只負(fù)責(zé)保證對象各部分完整創(chuàng)建或按某種順序創(chuàng)建。

產(chǎn)品角色(Product):建造中的復(fù)雜對象。它要包含那些定義組件的類,包括將這些組件裝配成產(chǎn)品的接口。

7. 效果

Builder模式的主要效果:

1 ) 它使你可以改變一個(gè)產(chǎn)品的內(nèi)部表示 Builder對象提供給導(dǎo)向器一個(gè)構(gòu)造產(chǎn)品的抽象接口。該接口使得生成器可以隱藏這個(gè)產(chǎn)品的表示和內(nèi)部結(jié)構(gòu)。它同時(shí)也隱藏了該產(chǎn)品是如何裝配的。因?yàn)楫a(chǎn)品是通過抽象接口構(gòu)造的,你在改變該產(chǎn)品的內(nèi)部表示時(shí)所要做的只是定義一個(gè)新的生成器。

2) 它將構(gòu)造代碼和表示代碼分開 Builder模式通過封裝一個(gè)復(fù)雜對象的創(chuàng)建和表示方式提高了對象的模塊性??蛻舨恍枰蓝x產(chǎn)品內(nèi)部結(jié)構(gòu)的類的所有信息;這些類是不出現(xiàn)在Builder接口中的。每個(gè)Concrete Builder包含了創(chuàng)建和裝配一個(gè)特定產(chǎn)品的所有代碼。這些代碼只需要寫一次;然后不同的Director可以復(fù)用它以在相同部件集合的基礎(chǔ)上構(gòu)作不同的Product。

3 ) 它使你可對構(gòu)造過程進(jìn)行更精細(xì)的控制 Builder模式與一下子就生成產(chǎn)品的創(chuàng)建型模式不同,它是在導(dǎo)向者的控制下一步一步構(gòu)造產(chǎn)品的。僅當(dāng)該產(chǎn)品完成時(shí)導(dǎo)向者才從生成器中取回它。因此Builder接口相比其他創(chuàng)建型模式能更好的反映產(chǎn)品的構(gòu)造過程。這使你可以更精細(xì)的控制構(gòu)建過程,從而能更精細(xì)的控制所得產(chǎn)品的內(nèi)部結(jié)構(gòu)。

8. 實(shí)現(xiàn):

指導(dǎo)者:收銀員

?php
 /**
 * 指導(dǎo)者:收銀員
 *
 */
 class DirectorCashier
 {
 /**
  * 收銀餐館員工返回的食物
  *
  */
 public function buildFood(Builder $builder) {
  $builder->buildPart1();
  $builder->buildPart2();
 }
 }

抽象建造者:

 /**
 * 抽象建造者
 *
 */
 abstract class Builder
 {
 /**
  * 創(chuàng)建產(chǎn)品的第一部分
   */
 public abstract function buildPart1();
 
 /**
  * 
  * 創(chuàng)建產(chǎn)品的第二部分
   */
 public abstract function buildPart2();
 
 /**
  * 
  * 返回產(chǎn)品
   */
 public abstract function getProduct();
 }

具體建造者類:

/**
 * 具體建造者類:餐館員工,返回的套餐是:漢堡兩個(gè)+飲料一個(gè)
 *
 */
 class ConcreteBuilder1 extends Builder
 {
 protected $_product = null;//產(chǎn)品對象
 function __construct(){
  $this->_product = new Product();
 }
 
 /**
  * 創(chuàng)建產(chǎn)品的第一部分::漢堡=2
   */
 public function buildPart1()
 {
  $this->_product->add('Hamburger',2);
 }
 /**
  * 
  * 創(chuàng)建產(chǎn)品的第二部分:
   */
 public function buildPart2()
 {
  $this->_product->add('Drink', 1);
 }
 /**
  * 返回產(chǎn)品對象 :
  * 
  */
 public function getProduct() {
  return $this->_product;
 }
 }
/**
 * 具體建造者類:餐館員工,漢堡1個(gè)+飲料2個(gè)
 *
 */
 class ConcreteBuilder2 extends Builder
 {
 protected $_product = null;//產(chǎn)品對象
 function __construct(){
  $this->_product = new Product();
 }
 
 /**
  * 創(chuàng)建產(chǎn)品的第一部分:漢堡
   */
 public function buildPart1()
 {
  $this->_product->add('Hamburger', 1);
 }
 /**
  * 
  * 創(chuàng)建產(chǎn)品的第二部分:drink=2
   */
 public function buildPart2()
 {
  $this->_product->add('Drink', 2);
 }
 /**
  * 返回產(chǎn)品對象 :
  * 
  */
 public function getProduct() {
  return $this->_product;
 }
 }

產(chǎn)品類:

/**
 * 產(chǎn)品類
 */
 class Product
 {
 public $products = array();
 /**
  * 添加具體產(chǎn)品
  */
 public function add($name, $value) {
  $this->products[$name] = $value;
 }
 /**
  * 給顧客查看產(chǎn)品
  */
 public function showToClient()
 {
  foreach ($this->products as $key => $v) {
  echo $key , '=' , $v ,'br>';
  }
 }
 }

客戶程序:

 //客戶程序
 class Client
 {
 /**
  * 顧客購買套餐
  *
  */
 public function buy($type) {
  //指導(dǎo)者,收銀員
  $director = new DirectorCashier(); 
  //餐館員工,收銀員
     $class = new ReflectionClass('ConcreteBuilder' .$type );
     $concreteBuilder = $class->newInstanceArgs();
     //收銀員組合員工返回的食物
     $director->buildFood($concreteBuilder);
     //返回給顧客
     $concreteBuilder->getProduct()->showToClient();
 }
 }
 //測試
 ini_set('display_errors', 'On');
 $c = new Client();
 $c->buy(1);//購買套餐1
 $c->buy(2);//購買套餐1

9. 建造者模式的優(yōu)點(diǎn)

       首先,建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產(chǎn)品類和建造者類是比較穩(wěn)定的,因此,將主要的業(yè)務(wù)邏輯封裝在導(dǎo)演類中對整體而言可以取得比較好的穩(wěn)定性。

       其次,建造者模式很容易進(jìn)行擴(kuò)展。如果有新的需求,通過實(shí)現(xiàn)一個(gè)新的建造者類就可以完成,基本上不用修改之前已經(jīng)測試通過的代碼,因此也就不會對原有功能引入風(fēng)險(xiǎn)。

10. 建造者模式與工廠模式的區(qū)別

      我們可以看到,建造者模式與工廠模式是極為相似的,總體上,建造者模式僅僅只比工廠模式多了一個(gè)“導(dǎo)演類”的角色。在建造者模式的類圖中,假如把這個(gè)導(dǎo)演類看做是最終調(diào)用的客戶端,那么圖中剩余的部分就可以看作是一個(gè)簡單的工廠模式了。

      與工廠模式相比,建造者模式一般用來創(chuàng)建更為復(fù)雜的對象,因?yàn)閷ο蟮膭?chuàng)建過程更為復(fù)雜,因此將對象的創(chuàng)建過程獨(dú)立出來組成一個(gè)新的類——導(dǎo)演類。也就是說,工廠模式是將對象的全部創(chuàng)建過程封裝在工廠類中,由工廠類向客戶端提供最終的產(chǎn)品;而建造者模式中,建造者類一般只提供產(chǎn)品類中各個(gè)組件的建造,而將具體建造過程交付給導(dǎo)演類。由導(dǎo)演類負(fù)責(zé)將各個(gè)組件按照特定的規(guī)則組建為產(chǎn)品,然后將組建好的產(chǎn)品交付給客戶端。

11. 總結(jié)

      建造者模式與工廠模式類似,他們都是建造者模式,適用的場景也很相似。一般來說,如果產(chǎn)品的建造很復(fù)雜,那么請用工廠模式;如果產(chǎn)品的建造更復(fù)雜,那么請用建造者模式。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • PHP設(shè)計(jì)模式之原型模式示例詳解
  • PHP設(shè)計(jì)模式之命令模式示例詳解
  • PHP設(shè)計(jì)模式(四)原型模式Prototype實(shí)例詳解【創(chuàng)建型】
  • PHP設(shè)計(jì)模式(一)工廠模式Factory實(shí)例詳解【創(chuàng)建型】
  • PHP設(shè)計(jì)模式概論【概念、分類、原則等】
  • PHP設(shè)計(jì)模式之 策略模式Strategy詳解【對象行為型】
  • PHP設(shè)計(jì)模式入門之狀態(tài)模式原理與實(shí)現(xiàn)方法分析
  • PHP設(shè)計(jì)模式入門之迭代器模式原理與實(shí)現(xiàn)方法分析
  • PHP設(shè)計(jì)模式之迭代器模式Iterator實(shí)例分析【對象行為型】
  • php設(shè)計(jì)模式之適配器模式實(shí)例分析【星際爭霸游戲案例】
  • php設(shè)計(jì)模式之迭代器模式實(shí)例分析【星際爭霸游戲案例】
  • 詳解PHP八大設(shè)計(jì)模式

標(biāo)簽:隴南 武漢 黃山 南通 河南 通遼 唐山 平頂山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP設(shè)計(jì)模式(三)建造者模式Builder實(shí)例詳解【創(chuàng)建型】》,本文關(guān)鍵詞  PHP,設(shè)計(jì)模式,三,建造者,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP設(shè)計(jì)模式(三)建造者模式Builder實(shí)例詳解【創(chuàng)建型】》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP設(shè)計(jì)模式(三)建造者模式Builder實(shí)例詳解【創(chuàng)建型】的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    制服丝袜av成人在线看| 91色九色蝌蚪| 99re成人精品视频| 欧美高清视频一二三区| 日韩一区二区中文字幕| 国产三级精品三级| 亚洲国产毛片aaaaa无费看| 国产久卡久卡久卡久卡视频精品| 91成人在线观看喷潮| 国产女人aaa级久久久级| 精品一区二区三区欧美| 欧美一区二区性放荡片| 婷婷开心激情综合| 欧美午夜精品免费| 亚洲国产精品自拍| 欧美性猛交xxxxxxxx| 一区二区三区四区国产精品| 99精品视频一区| 中文字幕中文字幕在线一区| 1区2区3区精品视频| 中文字幕av资源一区| 亚洲va国产va欧美va观看| 国产激情精品久久久第一区二区| 日本高清免费不卡视频| 26uuu国产日韩综合| 26uuu亚洲综合色欧美| 亚洲福利一区二区三区| 91精品麻豆日日躁夜夜躁| 日韩电影在线看| 欧美大白屁股肥臀xxxxxx| 美腿丝袜一区二区三区| 欧美va日韩va| 国产成人一级电影| 日韩一区中文字幕| 欧美视频一二三区| 麻豆91在线观看| 26uuu精品一区二区三区四区在线| 国产激情精品久久久第一区二区 | 韩国欧美国产1区| 26uuu精品一区二区| 高清不卡在线观看av| 亚洲精品免费播放| 欧美日韩高清一区二区| 精品无人码麻豆乱码1区2区 | 91美女片黄在线观看91美女| 一区二区三区在线视频免费观看 | 国产经典欧美精品| 亚洲婷婷综合久久一本伊一区| 日本乱人伦一区| 日韩影院在线观看| 欧美性大战xxxxx久久久| 亚洲男人都懂的| 欧美一区二区精品在线| 亚洲图片欧美视频| 欧美一级久久久久久久大片| 国产真实乱偷精品视频免| 国产精品无遮挡| 欧美午夜精品一区二区蜜桃| 麻豆国产精品视频| 中文字幕一区二区三中文字幕| 色婷婷av一区二区三区大白胸| 日韩av一区二区在线影视| 久久精品一区蜜桃臀影院| 色8久久人人97超碰香蕉987| 久久激情五月婷婷| 中文字幕一区二区三区在线不卡 | 欧美视频中文一区二区三区在线观看| 亚洲成av人片一区二区三区| 久久精品视频在线看| 欧美日韩精品一区视频| 成人午夜激情影院| 美女看a上一区| 亚洲一区二区三区美女| 国产三级精品视频| 日韩免费视频线观看| 91色九色蝌蚪| 粉嫩一区二区三区在线看| 亚洲444eee在线观看| 国产精品久久毛片av大全日韩| 337p亚洲精品色噜噜| 一本色道a无线码一区v| 国产成人精品一区二区三区四区| 视频在线在亚洲| 一区二区三区四区视频精品免费| 国产欧美日本一区二区三区| 日韩限制级电影在线观看| 在线观看日韩av先锋影音电影院| 懂色av一区二区三区免费观看 | 亚洲欧洲一区二区三区| 2023国产精华国产精品| 欧美一卡2卡三卡4卡5免费| 欧美性大战xxxxx久久久| 色综合色综合色综合| 精品一区二区三区不卡 | 亚洲免费在线播放| 欧美一二三四区在线| 成人av电影在线播放| 日韩va亚洲va欧美va久久| 国产精品久线在线观看| 欧美美女喷水视频| 成人av高清在线| 麻豆久久一区二区| 亚洲视频一区二区免费在线观看| 正在播放一区二区| 99久久精品免费看国产免费软件| 天天操天天色综合| 亚洲欧洲成人自拍| 精品处破学生在线二十三| 欧美亚洲综合久久| 成人深夜在线观看| 理论电影国产精品| 一区二区三区**美女毛片| 久久蜜桃香蕉精品一区二区三区| 91久久精品一区二区| 国产成+人+日韩+欧美+亚洲| 色狠狠桃花综合| 国产精品免费人成网站| 三级久久三级久久久| 91麻豆精品一区二区三区| 蜜桃av噜噜一区二区三区小说| 日韩精品一二三四| 另类小说欧美激情| 国产一区高清在线| 成人教育av在线| jizz一区二区| 色婷婷久久99综合精品jk白丝| 色噜噜夜夜夜综合网| 欧美午夜精品免费| 日韩欧美一区在线观看| 久久久国际精品| 18成人在线视频| 婷婷开心久久网| 国产视频911| 欧美亚州韩日在线看免费版国语版| 成人h版在线观看| 国产成人综合自拍| 激情欧美一区二区| 久久91精品国产91久久小草 | 欧美国产禁国产网站cc| 久久人人97超碰com| 日韩一区二区三区观看| 欧美电影影音先锋| 91精品国产综合久久久久久久久久 | 亚洲午夜电影在线| 精品一区二区三区免费观看| 99视频有精品| 欧美一区二区三区白人| 国产精品伦理在线| 日韩和欧美一区二区三区| 国产精品小仙女| 欧美视频在线一区| 欧美韩日一区二区三区| 欧美日韩精品一区二区| 2023国产精品| 亚洲综合成人在线视频| 国产一区二区三区四区五区入口| 色婷婷久久一区二区三区麻豆| 日韩欧美国产一区二区在线播放| 亚洲第一搞黄网站| 日本不卡视频在线观看| 蜜桃一区二区三区在线| 韩国在线一区二区| 成人av网站免费| 日本精品视频一区二区| 91精品欧美久久久久久动漫| 精品国产一区a| 国产精品福利一区| 国产午夜精品美女毛片视频| 欧美国产精品中文字幕| 蜜桃视频在线观看一区| 色久优优欧美色久优优| 国产女人水真多18毛片18精品视频 | www国产精品av| 亚洲成人资源网| 91亚洲资源网| 日本一区二区在线不卡| 久久爱另类一区二区小说| 精品视频资源站| 亚洲精品欧美专区| 白白色 亚洲乱淫| 国产无遮挡一区二区三区毛片日本| 青青草精品视频| 欧美日韩激情一区| 久久综合国产精品| 国产一区二区三区精品视频| 欧美精品在线一区二区三区| 国产精品电影院| 国产成人免费xxxxxxxx| 精品国产一区二区三区四区四| 午夜在线成人av| 91豆麻精品91久久久久久| 中文字幕av一区二区三区高| 国产一区二区在线电影| 欧美成人在线直播| 久久av老司机精品网站导航| 欧美一区二区三区四区高清| 日韩中文字幕一区二区三区| 欧美吻胸吃奶大尺度电影| 一区二区在线观看免费视频播放| 国产欧美日韩在线视频|