<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)  編輯  收藏 所屬分類: 設計模式

    主站蜘蛛池模板: 99re6在线精品视频免费播放 | 男女一进一出抽搐免费视频| 国产亚洲精品成人AA片| 亚洲福利一区二区三区| 亚洲邪恶天堂影院在线观看| 亚洲成AV人片在线观看| 亚洲va中文字幕无码久久不卡| 亚洲午夜久久久影院伊人| 国产精品亚洲高清一区二区| 亚洲国产精品自产在线播放| 国产亚洲成归v人片在线观看 | 亚洲精品视频在线免费| 亚洲免费福利视频| 全免费毛片在线播放| 一二三四视频在线观看中文版免费| 91成年人免费视频| 野花高清在线观看免费完整版中文| 毛片免费观看网站| 国产成人精品免费直播 | 亚洲人成免费电影| 无限动漫网在线观看免费| 成年人免费网站在线观看| 在线观看国产情趣免费视频| 伊人久久亚洲综合影院| 亚洲美日韩Av中文字幕无码久久久妻妇| 亚洲午夜无码久久久久| 亚洲综合精品一二三区在线| 国产精品亚洲专区在线观看| 亚洲av成人一区二区三区观看在线 | 青青草免费在线视频| 国产精品免费电影| 久久精品国产精品亚洲| 亚洲AV无码一区二区二三区入口| 亚洲美女一区二区三区| 亚洲最大的成人网| 男女猛烈xx00免费视频试看| 两个人的视频www免费| 2021在线观看视频精品免费| 日韩a在线观看免费观看| 久久久久亚洲AV成人网人人软件| 日韩精品一区二区亚洲AV观看|