①UML設計
②定義及使用場景:利用共享的方式解決大量創建銷燬導致額外開銷
③示例:
/**
* 構建享元角色接口
*/
public interface Flyweight{
void action();
}
/**
* 構建具體享元類
*/
public class ConcreteFlyweight implements Flyweight{
@Override
public void action(){
System.out.println("享元模式");
}
}
/**
* 構建享元工廠
*/
public class FactoryFlyweight{
static Map<String,Flyweight> flyweightMap = Maps.newConcurrentMap();//共享池
public static Flyweight getFlyweight(String key){
Flyweight flyweight = flyweightMap.get(key);//根據key先去共享池中查找是否已有需要的對象
if(null == flyweight){
flyweightMap.put(key,new ConcreteFlyweight());//沒有需要的對象就重新創建一個,並保存到共享池中
}
return flyweightMap.get(key);
}
public static int getSize(){
return flyweightMap.size();
}
}
public class Test{
public static void main(String args[]){
Flyweight fw1 = FactoryFlyweight.getFlyweight("1");
fw1.action();
Flyweight fw2 = FactoryFlyweight.getFlyweight("2");
fw2.action();
Flyweight fw3 = FactoryFlyweight.getFlyweight("1");
fw3.action();
System.out.println(FactoryFlyweight.getSize());//實際值保存了兩個對象,所以爲2
}}