<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數據加載中……

    Flyweight模式 的學習

    一、Flyweight模式的意圖:

    緩存(共享)可以共同的對象、屬性,避免創建大量的重復對象、內容。

    二、Flyweight模式的特點:

    為重復或可共享的對象、屬性設置一個緩沖,稱為內部屬性。這些內部屬性一般情況下都是不可修改的,也就是在第一個對象、屬性被創建后,就不會去修改了(否則就沒意義了)。

    除了共享對象、屬性之外,還有一些是基于應用環境,或是實時數據,這些無法共享的東西我們稱為外部狀態。

    在Flyweight模式應用中,通常修改的是外部狀態屬性,而內部狀態屬性一般都是用于參考或計算時引用。

    三、Flyweight模式的構成:


    Flyweight模式一般由幾個部分組成:

    ·Flyweight接口(抽象類) :定義了一個可共享的元類
    ·Flyweight實現類:實現了元類中的操作,而且可能會提供一個用于保存內部狀態(共享屬性)的空間
    ·Flyweight Factory:創建Flyweight的工廠類,創建后將其保存到Flyweight Pool中
    ·Flyweight Pool:緩沖Flyweight對象的池,通常包含在工廠類中


    四、Flyweight模式的簡單實現

    1.Flyweight:

    package com.pattern.flyweight2;

    public abstract class Flyweight
    {
        
    public abstract void operation();
    }


    2.ConcreateFlyweight:
    package com.pattern.flyweight2;

    public class ConcreateFlyweight extends Flyweight
    {
        
    private Object key;

        
    public ConcreateFlyweight(Object key)
        
    {
            
    this.key = key;
        }


        @Override
        
    public void operation()
        
    {
            System.out.println(
    "key:" + key);
        }


    }

    3.FlyweightFactory:
    package com.pattern.flyweight2;

    import java.util.Hashtable;

    @SuppressWarnings(
    "unchecked")
    public class FlyweightFactory
    {
     //Flyweight pool
        
    private Hashtable flyweights = new Hashtable();

        
    public Flyweight getFlyweight(Object key)
        
    {
            Flyweight flyweight 
    = null;
            
    if(flyweights.containsKey(key))
            
    {
                flyweight 
    = (Flyweight) flyweights.get(key);
            }

            
    if (!flyweights.containsKey(key))
            
    {
                flyweight 
    = new ConcreateFlyweight(key);
                flyweights.put(key, flyweight);
            }

            
    return flyweight;
        }

        
        
    public int getFlyweightsSize()
        
    {
            
    return flyweights.size();
        }

    }


    4.測試類:
    package com.pattern.flyweight2;

    public class Client
    {
        
    private Flyweight f1 = null;
        
    private Flyweight f2 = null;
        
    private Flyweight f3 = null;
        
    private Flyweight f4 = null;
        FlyweightFactory factory 
    = new FlyweightFactory();

        
    public Client()
        
    {
            f1 
    = factory.getFlyweight("baidu");
            f2 
    = factory.getFlyweight("google");
            f3 
    = factory.getFlyweight("baidu");
            f4 
    = factory.getFlyweight("google");
        }


        
    public void show()
        
    {
            f1.operation();
            f2.operation();
            f3.operation();
            f4.operation();
            System.out.println(factory.getFlyweightsSize());
        }


        
    public static void main(String[] args)
        
    {
            Client client 
    = new Client();
            client.show();
        }

    }

    也就是在緩沖這一點上,體現了Flyweight模式的精髓。

    posted on 2008-05-27 10:42 々上善若水々 閱讀(3173) 評論(0)  編輯  收藏 所屬分類: 設計模式

    主站蜘蛛池模板: a级成人毛片免费视频高清| 国产精品亚洲二区在线| 日韩免费在线观看视频| 亚洲乱码中文字幕综合| 国产在线精品观看免费观看| 亚洲国产婷婷六月丁香| 97在线免费观看视频| 亚洲av伊人久久综合密臀性色 | 丁香花在线观看免费观看 | 亚洲激情在线观看| 一级毛片aaaaaa免费看| 91精品国产亚洲爽啪在线观看| 91精品全国免费观看含羞草| 亚洲不卡在线观看| 日本无卡码免费一区二区三区| 美女视频黄频a免费观看| 亚洲尤码不卡AV麻豆| 一区二区三区四区免费视频 | 日韩免费高清一级毛片| 狠狠亚洲狠狠欧洲2019| 中文无码成人免费视频在线观看| 亚洲av网址在线观看| 99在线精品免费视频九九视| 亚洲hairy多毛pics大全| 亚洲一区无码精品色| 一级毛片在线免费观看| 中文字幕亚洲综合久久综合| 少妇亚洲免费精品| 国产婷婷成人久久Av免费高清| 亚洲精品乱码久久久久久下载| 黄网址在线永久免费观看| 国产精品青草视频免费播放| 色播亚洲视频在线观看| 麻豆成人精品国产免费| 怡红院免费全部视频在线视频| 亚洲国产成人精品久久| 亚洲精品成人在线| 67194熟妇在线永久免费观看| 黄色毛片视频免费| 亚洲精品福利在线观看| 亚洲第一区精品观看|