Flyweight模式 的學(xué)習(xí)
一、Flyweight模式的意圖:
緩存(共享)可以共同的對(duì)象、屬性,避免創(chuàng)建大量的重復(fù)對(duì)象、內(nèi)容。
二、Flyweight模式的特點(diǎn):
為重復(fù)或可共享的對(duì)象、屬性設(shè)置一個(gè)緩沖,稱為內(nèi)部屬性。這些內(nèi)部屬性一般情況下都是不可修改的,也就是在第一個(gè)對(duì)象、屬性被創(chuàng)建后,就不會(huì)去修改了(否則就沒意義了)。
除了共享對(duì)象、屬性之外,還有一些是基于應(yīng)用環(huán)境,或是實(shí)時(shí)數(shù)據(jù),這些無法共享的東西我們稱為外部狀態(tài)。
在Flyweight模式應(yīng)用中,通常修改的是外部狀態(tài)屬性,而內(nèi)部狀態(tài)屬性一般都是用于參考或計(jì)算時(shí)引用。
三、Flyweight模式的構(gòu)成:
計(jì)模式/Flyweight.JPG)
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.測(cè)試類:
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();
}
}
也就是在緩沖這一點(diǎn)上,體現(xiàn)了Flyweight模式的精髓。
緩存(共享)可以共同的對(duì)象、屬性,避免創(chuàng)建大量的重復(fù)對(duì)象、內(nèi)容。
二、Flyweight模式的特點(diǎn):
為重復(fù)或可共享的對(duì)象、屬性設(shè)置一個(gè)緩沖,稱為內(nèi)部屬性。這些內(nèi)部屬性一般情況下都是不可修改的,也就是在第一個(gè)對(duì)象、屬性被創(chuàng)建后,就不會(huì)去修改了(否則就沒意義了)。
除了共享對(duì)象、屬性之外,還有一些是基于應(yīng)用環(huán)境,或是實(shí)時(shí)數(shù)據(jù),這些無法共享的東西我們稱為外部狀態(tài)。
在Flyweight模式應(yīng)用中,通常修改的是外部狀態(tài)屬性,而內(nèi)部狀態(tài)屬性一般都是用于參考或計(jì)算時(shí)引用。
三、Flyweight模式的構(gòu)成:
Flyweight模式一般由幾個(gè)部分組成:
·Flyweight接口(抽象類) :定義了一個(gè)可共享的元類
·Flyweight實(shí)現(xiàn)類:實(shí)現(xiàn)了元類中的操作,而且可能會(huì)提供一個(gè)用于保存內(nèi)部狀態(tài)(共享屬性)的空間
·Flyweight Factory:創(chuàng)建Flyweight的工廠類,創(chuàng)建后將其保存到Flyweight Pool中
·Flyweight Pool:緩沖Flyweight對(duì)象的池,通常包含在工廠類中
四、Flyweight模式的簡(jiǎn)單實(shí)現(xiàn)
1.Flyweight:







2.ConcreateFlyweight:


























//Flyweight pool























4.測(cè)試類:


































posted on 2008-05-27 10:42 々上善若水々 閱讀(3178) 評(píng)論(0) 編輯 收藏 所屬分類: 設(shè)計(jì)模式