定义
使用共享对象可有效地支持大量的细粒度的对象。
使用场景
- 系统中存在大量的相似对象。
- 需要缓冲池。
- 细粒度的对象都具备较接近的外部状态,且内部状态与环境无关。
Java 代码示例
public interface Flyweight {
void doSomething();
}
public class ConcreteFlyweight implements Flyweight {
private Object obj1;
private Object obj2;
private Object obj3;
public ConcreteFlyweight(Object obj1, Object obj2) {
this.obj1 = obj1;
this.obj2 = obj2;
}
public Object getObj3() {
return obj3;
}
public void setObj3(Object obj3) {
this.obj3 = obj3;
}
@Override
public void doSomething() {
}
}
public class FlyweightFactory {
private static Map<String, Flyweight> sFlyweightMap = new ConcurrentHashMap<>();
public static Flyweight getFlyweight(Object arg1, Object arg2) {
// key 代表对象的内部状态
String key = arg1.toString() + arg2.toString();
if (sFlyweightMap.containsKey(key)) {
return sFlyweightMap.get(key);
} else {
Flyweight flyweight = new ConcreteFlyweight(arg1, arg2);
sFlyweightMap.put(key, flyweight);
return flyweight;
}
}
}