<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                #### 享元模式 * [**享元模式**](https://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/flyweight.html) **享元模式**(英語:Flyweight Pattern)是一種軟件[設計模式](https://zh.wikipedia.org/wiki/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F_(%E8%AE%A1%E7%AE%97%E6%9C%BA))。它使用共享物件,用來盡可能減少內存使用量以及分享資訊給盡可能多的相似物件;它適合用于當大量物件只是重復因而導致無法令人接受的使用大量內存。通常物件中的部分狀態是可以分享。常見做法是把它們放在外部數據結構,當需要使用時再將它們傳遞給享元。由于享元模式要求能夠共享的對象必須是細粒度對象,因此它又稱為輕量級模式,它是一種對象結構型模式。 要理解享元模式,先要理解兩個重要的概念:內部狀態和外部狀態。 內部狀態存儲于flyweight中,它包含了獨立于flyweight場景的信息,這些信息使得flyweight可以被共享。而外部狀態取決于flyweight場景,并根據場景而變化,因此不可共享。用戶對象負責在必要的時候將外部狀態傳遞給flyweight。 `角色` Flyweight: 抽象享元類 ConcreteFlyweight: 具體享元類 UnsharedConcreteFlyweight: 非共享具體享元類 FlyweightFactory: 享元工廠類 `UML類圖` ![此處輸入圖片的描述](https://doc.shiyanlou.com/document-uid108299labid2297timestamp1486374834526.png) `示例代碼`:`FlyWeight.class.php` ~~~php <?php interface Flyweight{ public function operation(); } class MyFlyweight implements Flyweight { protected $intrinsicState; function __construct($str) { $this->intrinsicState = $str; } public function operation() { echo 'MyFlyweight['.$this->intrinsicState.'] do operation. <br>'; } } class FlyweightFactory { protected static $flyweightPool; function __construct() { if (!isset(self::$flyweightPool)) { self::$flyweightPool = []; } } public function getFlyweight($str) { if (!array_key_exists($str,self::$flyweightPool)) { $fw = new MyFlyweight($str); self::$flyweightPool[$str] = $fw; return $fw; } else { echo "aready in the pool,use the exist one: <br>"; return self::$flyweightPool[$str]; } } } $factory = new FlyweightFactory(); $fw = $factory->getFlyweight('one'); $fw->operation(); $fw1 = $factory->getFlyweight('two'); $fw1->operation(); $fw2 = $factory->getFlyweight('one'); $fw2->operation(); ~~~ 享元模式的核心在于享元工廠類,享元工廠類的作用在于提供一個用于存儲享元對象的享元池,用戶需要對象時,首先從享元池中獲取,如果享元池中不存在,則創建一個新的享元對象返回給用戶,并在享元池中保存該新增對象。
                  <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>

                              哎呀哎呀视频在线观看