<address id="16111"></address>

<output id="16111"><video id="16111"></video></output>
<code id="16111"><ol id="16111"><td id="16111"></td></ol></code>
<output id="16111"><form id="16111"></form></output>
    1. <acronym id="16111"></acronym>
    2. <output id="16111"><legend id="16111"><blockquote id="16111"></blockquote></legend></output>
      <output id="16111"></output>
      <dd id="16111"></dd>
      <var id="16111"><ol id="16111"></ol></var>

      好程序員-千鋒教育旗下高端IT職業教育品牌

      400-811-9990
      我的賬戶
      好程序員

      專注高端IT職業培訓

      親愛的猿猿,歡迎!

      已有賬號,請

      如尚未注冊?

      [JavaEE] 好程序員高端班教學java設計模式之享元模式

      [復制鏈接]
      43 0
      葉子老師 發表于 前天 11:41 | 只看該作者 |閱讀模式 打印 上一主題 下一主題
        好程序員高端班教學java設計模式之享元模式,享元模式有點類似于單例模式,都是只生成一個對象被共享使用。享元模式主要目的就是讓多個對象實現共享,減少不必要的內存消耗,將多對同一對象的訪問集中起來,不必為每個訪問者創建一個單獨的對象,以此來降低內存的消耗。
        在享元模式結構中包含如下幾個角色:
        Flyweight(抽象享元類):通常是一個接口或抽象類,在抽象享元類中聲明了具體享元類公共的方法,這些方法可以向外界提供享元對象的內部數據(內部狀態),同時也可以通過這些方法來設置外部數據(外部狀態)。
        ConcreteFlyweight(具體享元類):它實現了抽象享元類,其實例稱為享元對象;在具體享元類中為內部狀態提供了存儲空間。通常我們可以結合單例模式來設計具體享元類,為每一個具體享元類提供唯一的享元對象。
        UnsharedConcreteFlyweight(非共享具體享元類):并不是所有的抽象享元類的子類都需要被共享,不能被共享的子類可設計為非共享具體享元類;當需要一個非共享具體享元類的對象時可以直接通過實例化創建。
        FlyweightFactory(享元工廠類):享元工廠類用于創建并管理享元對象,它針對抽象享元類編程,將各種類型的具體享元對象存儲在一個享元池中,享元池一般設計為一個存儲“鍵值對”的集合(也可以是其他類型的集合),可以結合工廠模式進行設計;當用戶請求一個具體享元對象時,享元工廠提供一個存儲在享元池中已創建的實例或者創建一個新的實例(如果不存在的話),返回新創建的實例并將其存儲在享元池中。
        2、享元模式的實現
        在享元模式中引入了享元工廠類,享元工廠類的作用在于提供一個用于存儲享元對象的享元池,當用戶需要對象時,首先從享元池中獲取,如果享元池中不存在,則創建一個新的享元對象返回給用戶,并在享元池中保存該新增對象。接下來,實現一個登陸的享元模式。
        3、享元模式的優缺點
        享元模式優點,在于外部狀態相對獨立,使得對象可以在不同的環境中被復用(共享對象可以適應不同的外部環境)。且享元模式可共享相同或相似的細粒度對象,從而減少了內存消耗,同時降低了對象創建與垃圾回收的開銷。
        享元模式缺點,外部狀態由客戶端保存,共享對象讀取外部狀態的開銷可能比較大。享元模式要求將內部狀態與外部狀態分離,這使得程序的邏輯復雜化,同時也增加了狀態維護成本。

      好程序員Java培訓官網:http://www.s8781.com/javaEE_class.shtml

      精彩內容,一鍵分享給更多人!
      收藏
      收藏0
      轉播
      轉播
      分享
      淘帖0
      支持
      支持0
      反對
      反對0
      回復

      使用道具 舉報

      您需要登錄后才可以回帖

      本版積分規則

      關注我們
      好程序員
      千鋒好程序員

      北京校區(總部):北京市海淀區寶盛北里西區28號中關村智誠科創大廈

      深圳西部硅谷校區:深圳市寶安區寶安大道5010號深圳西部硅谷B座A區605-619

      杭州龍馳智慧谷校區:浙江省杭州市下沙經濟技術開發區元成路199號龍馳智慧谷B座7層

      鄭州校區:鄭州市二七區航海中路60號海為科技園C區10層、12層

      Copyright 2007-2019 北京千鋒互聯科技有限公司 .All Right

      京ICP備12003911號-5 京公安網11010802011455號

      請您保持通訊暢通1對1咨詢馬上開啟

      狠狠射网