<code id="nbzwf"></code>
  1. <var id="nbzwf"></var>
    1. <meter id="nbzwf"></meter>
        <option id="nbzwf"><menuitem id="nbzwf"></menuitem></option><listing id="nbzwf"><delect id="nbzwf"><p id="nbzwf"></p></delect></listing>
        • Java設計模式——享元模式

          發布:51Code 時間: 2019-07-26 14:13

        • 享元模式有點類似于單例模式,都是只生成一個對象被共享使用。享元模式主要目的就是讓多個對象實現共享,減少不必要的內存消耗,將多對同一對象的訪問集中起來,不必為每個訪...

        • 享元模式有點類似于單例模式,都是只生成一個對象被共享使用。享元模式主要目的就是讓多個對象實現共享,減少不必要的內存消耗,將多對同一對象的訪問集中起來,不必為每個訪問者創建一個單獨的對象,以此來降低內存的消耗。

          1、享元模式結構圖

          因為享元模式結構比較復雜,一般結合工廠模式一起使用,在它的結構圖中包含了一個享元工廠類。

          在享元模式結構圖中包含如下幾個角色:

          Flyweight(抽象享元類):通常是一個接口或抽象類,在抽象享元類中聲明了具體享元類公共的方法,這些方法可以向外界提供享元對象的內部數據(內部狀態),同時也可以通過這些方法來設置外部數據(外部狀態)。

          ConcreteFlyweight(具體享元類):它實現了抽象享元類,其實例稱為享元對象;在具體享元類中為內部狀態提供了存儲空間。通常我們可以結合單例模式來設計具體享元類,為每一個具體享元類提供唯一的享元對象。

          UnsharedConcreteFlyweight(非共享具體享元類):并不是所有的抽象享元類的子類都需要被共享,不能被共享的子類可設計為非共享具體享元類;當需要一個非共享具體享元類的對象時可以直接通過實例化創建。

          FlyweightFactory(享元工廠類):享元工廠類用于創建并管理享元對象,它針對抽象享元類編程,將各種類型的具體享元對象存儲在一個享元池中,享元池一般設計為一個存儲"鍵值對"的集合(也可以是其他類型的集合),可以結合工廠模式進行設計;當用戶請求一個具體享元對象時,享元工廠提供一個存儲在享元池中已創建的實例或者創建一個新的實例(如果不存在的話),返回新創建的實例并將其存儲在享元池中。

          2、享元模式的實現

          在享元模式中引入了享元工廠類,享元工廠類的作用在于提供一個用于存儲享元對象的享元池,當用戶需要對象時,首先從享元池中獲取,如果享元池中不存在,則創建一個新的享元對象返回給用戶,并在享元池中保存該新增對象。接下來,實現一個登陸的享元模式。

          3、享元模式的優缺點

          享元模式優點,在于外部狀態相對獨立,使得對象可以在不同的環境中被復用(共享對象可以適應不同的外部環境)。且享元模式可共享相同或相似的細粒度對象,從而減少了內存消耗,同時降低了對象創建與垃圾回收的開銷。

          享元模式缺點,外部狀態由客戶端保存,共享對象讀取外部狀態的開銷可能比較大。享元模式要求將內部狀態與外部狀態分離,這使得程序的邏輯復雜化,同時也增加了狀態維護成本。

          文章來源:網絡 版權歸原作者所有
          如涉及知識產權問題,請權利人聯系博為峰小編(021-64471599-8103),我們將立即處理。

        • 上一篇:從入門到熟悉 HTTPS 的 9 個問題

          下一篇:2019年7月份,阿里最新Java高頻面試真題匯總

        網站導航
        Copyright(C)51Code軟件開發網 2003-2019 , 滬ICP備05003035號-6
        北京快三路线温都水城

          <code id="nbzwf"></code>
        1. <var id="nbzwf"></var>
          1. <meter id="nbzwf"></meter>
              <option id="nbzwf"><menuitem id="nbzwf"></menuitem></option><listing id="nbzwf"><delect id="nbzwf"><p id="nbzwf"></p></delect></listing>

                <code id="nbzwf"></code>
              1. <var id="nbzwf"></var>
                1. <meter id="nbzwf"></meter>
                    <option id="nbzwf"><menuitem id="nbzwf"></menuitem></option><listing id="nbzwf"><delect id="nbzwf"><p id="nbzwf"></p></delect></listing>
                    山东十一选五开奖走势 2014北京赛pk10 重庆时时开奖视频软件 3分赛计划 时时彩算号公式 单机捕鱼大赛 彩77彩票app在哪下载 河北时时2017 南粤26选5天天开奖吗 澳门洗码是怎么赚钱的