运用共享技术有效地支持大量细粒度的对象
这里写图片描述实际上就是通过一个容器存储对象,等到需要用的时候,再获取对象的引用
优点:
减少对象数量,节省内存空间
缺点:
维护共享对象需要额外开销,如需要专门设置一个线程来回收
代码:
Main
public class Main {
public static void main(String[] args) {
Flyweight f1,f2,f3,f4;
FlyweightFactory factory=new FlyweightFactory();
f1=factory.getFlyWeight("he");
f2=factory.getFlyWeight("jd");
f3=factory.getFlyWeight("he");
f4=factory.getFlyWeight("he");
f1.operation();f2.operation();f3.operation();f4.operation();
System.out.println(factory.getFlyWeightSize());
}
}
abs:FlyWeight
public abstract class Flyweight {
public abstract void operation();
}
imp:ConcreteFlyWeight
public class ConcreteFlyweight extends Flyweight {
private String name;
public ConcreteFlyweight(String name){
this.name=name;
}
@Override
public void operation() {
System.out.println("this is concrete flyweight name is "+this.name);
}
}
imp:FlyWeightFactory
public class FlyweightFactory {
private Map flyweight=new HashMap<Object, Object>();
public Flyweight getFlyWeight(Object obj){
Flyweight temp=(Flyweight) this.flyweight.get(obj);
if(temp==null){
temp=new ConcreteFlyweight((String) obj);
this.flyweight.put(obj, temp);
}
return temp;
}
public int getFlyWeightSize(){
return this.flyweight.size();
}
}
网友评论