<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                >建造者模式(Builder Pattern):將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 建造者模式是一步一步創建一個復雜的對象,它允許用戶只通過指定復雜對象的類型和內容就可以構建它們,用戶不需要知道內部的具體構建細節。建造者模式屬于對象創建型模式。根據中文翻譯的不同,建造者模式又可以稱為生成器模式。 ## (一)為什么需要建造者模式 1,對象的生產需要復雜的初始化,比如給一大堆類成員屬性賦初值,設置一下其他的系統環境變量。使用建造者模式可以將這些初始化工作封裝起來。 2,對象的生成時可根據初始化的順序或數據不同,而生成不同角色。 ## (二)建造者模式結構圖 ![](https://box.kancloud.cn/3d3df8a65c0db7796c7b5daa5b3ffd6c_820x532.png) ## (三)模式應用 在很多游戲軟件中,地圖包括天空、地面、背景等組成部分,人物角色包括人體、服裝、裝備等組成部分,可以使用建造者模式對其進行設計,通過不同的具體建造者創建不同類型的地圖或人物 ## (四)設計實例 如果我們想創造出有一個person類,我們通過實例化時設置的屬性不同,讓他們兩人一個是速度快的小孩,一個是知識深的長者 class person { public $age; public $speed; public $knowledge; } //抽象建造者類 abstract class Builder{ public $_person; public abstract function setAge(); public abstract function setSpeed(); public abstract function setKnowledge(); public function __construct(Person $person){ $this->_person=$person; } public function getPerson(){ return $this->_person; } } //長者建造者 class OlderBuider extends Builder{ public function setAge(){ $this->_person->age=70; } public function setSpeed(){ $this->_person->speed="low"; } public function setKnowledge(){ $this->_person->knowledge='more'; } } //小孩建造者 class ChildBuider extends Builder{ public function setAge(){ $this->_person->age=10; } public function setSpeed(){ $this->_person->speed="fast"; } public function setKnowledge(){ $this->_person->knowledge='litte'; } } //建造指揮者 class Director{ private $_builder; public function __construct(Builder $builder){ $this->_builder = $builder; } public function built(){ $this->_builder->setAge(); $this->_builder->setSpeed(); $this->_builder->setKnowledge(); } } //實例化一個長者建造者 $oldB = new OlderBuider(new Person); //實例化一個建造指揮者 $director = new Director($oldB); //指揮建造 $director->built(); //得到長者 $older = $oldB->getPerson(); var_dump($older); ## (五)總結 使用建造者模式時,我們把創建一個person實例的過程分為了兩步. 一步是先交給對應角色的建造者,如長者建造者。這樣的好處就把角色的屬性設置封裝了起來,我們不用在new一個person時,因為要得到一個older角色的實例,而在外面寫了一堆$older->age=70。 另一步是交給了一個建造指揮者,調了一個built方法,通過先設置age,再設置Speed的順序,初始化這個角色。當然在這個例子中,初始化的順序,是無所謂的。但是如果對于一個建造漢堡,或是地圖,初始化的順序不同,可能就會得到不同的結果。 也許,你會說,我直接設置也很方便呀。是的,對于某些情況是這樣的。但是如果你考慮,我現在想增加一個青年人角色呢?如果我現在想讓建造有初始化有三種不同的順序呢? 如果你使用了建造者模式,這兩個問題就簡單了,增加一個青年人角色,那就增加一個青年年建造者類。初始化三種不同的順序,那么就在指揮建造者中增加兩種建造方法。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看