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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                享元模式(Flyweight):運用共享的技術有效地支持大量細粒度的對象。主要目的是實現對象的共享,即共享池,當系統中對象多的時候可以減少內存的開銷。在某種程度上,你可以把單例看成是享元的一種特例。 ##一、uml建模: ![](https://box.kancloud.cn/2016-02-19_56c7196f39b6b.jpg) ##二、代碼實現 ~~~ /** * 享元模式(Flyweight):運用共享的技術有效地支持大量細粒度的對象。 * * 主要目的是實現對象的共享,即共享池,當系統中對象多的時候可以減少內存的開銷。 */ abstract class FlyWeight { public abstract void method(); } /** * 創建持有key的子類 */ class SubFlyWeight extends FlyWeight { private String key; public SubFlyWeight(String key) { this.key = key; } @Override public void method() { System.out.println("this is the sub method,and the key is " + this.key); } } /** * 享元工廠:負責創建和管理享元對象 */ class FlyweightFactory { private Map<String, FlyWeight> map = new HashMap<String, FlyWeight>(); /** * 獲取享元對象 */ public FlyWeight getFlyWeight(String key) { FlyWeight flyWeight = map.get(key); if (flyWeight == null) { flyWeight = new SubFlyWeight(key); map.put(key, flyWeight); } return flyWeight; } /** * 獲取享元對象數量 */ public int getCount() { return map.size(); } } /** * 客戶端測試類 * * @author Leo */ public class Test { public static void main(String[] args) { /** * 創建享元工廠 */ FlyweightFactory factory = new FlyweightFactory(); /***第一種情況:key相同時 *********/ FlyWeight flyWeightA = factory.getFlyWeight("aaa"); FlyWeight flyWeightB = factory.getFlyWeight("aaa"); /** * 透過打印結果為true可以知道: 由于key都為"aaa",所以flyWeightA和flyWeightB指向同一塊內存地址 */ System.out.println(flyWeightA == flyWeightB); flyWeightA.method(); flyWeightB.method(); /** * 享元對象數量:1 */ System.out.println(factory.getCount()); /***第二種情況:key不相同時 *********/ System.out.println("\n======================================"); FlyWeight flyWeightC = factory.getFlyWeight("ccc"); /** * 打印結果為false */ System.out.println(flyWeightA == flyWeightC); flyWeightC.method(); /** * 享元對象數量:2 */ System.out.println(factory.getCount()); } } ~~~ 打印結果: ~~~ true this is the sub method,and the key is aaa this is the sub method,and the key is aaa 1 ====================================== false this is the sub method,and the key is ccc 2 ~~~ ##三、總結 享元與單例的區別:1、與單例模式不同,享元模式是一個類可以有很多對象(共享一組對象集合),而單例是一個類僅一個對象;2、它們的目的也不一樣,享元模式是為了節約內存空間,提升程序性能(避免大量的new操作),而單例模式則主要是共享單個對象的狀態及特征。
                  <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>

                              哎呀哎呀视频在线观看