享元模式
基础概念
什么是享元模式?
答案: 享元模式(Flyweight Pattern)运用共享技术有效地支持大量细粒度的对象。
使用场景:
- 系统中有大量相似对象
- 需要缓冲池的场景
优点:
- 减少对象数量
- 节省内存
缺点:
- 提高系统复杂度
- 需要分离内部状态和外部状态
实现方式
java
// 享元接口
public interface Flyweight {
void operation(String extrinsicState);
}
// 具体享元
public class ConcreteFlyweight implements Flyweight {
private String intrinsicState;
public ConcreteFlyweight(String intrinsicState) {
this.intrinsicState = intrinsicState;
}
@Override
public void operation(String extrinsicState) {
System.out.println("内部状态: " + intrinsicState + ", 外部状态: " + extrinsicState);
}
}
// 享元工厂
public class FlyweightFactory {
private Map<String, Flyweight> flyweights = new HashMap<>();
public Flyweight getFlyweight(String key) {
if (!flyweights.containsKey(key)) {
flyweights.put(key, new ConcreteFlyweight(key));
}
return flyweights.get(key);
}
public int getFlyweightCount() {
return flyweights.size();
}
}
// 使用
FlyweightFactory factory = new FlyweightFactory();
Flyweight fw1 = factory.getFlyweight("A");
Flyweight fw2 = factory.getFlyweight("A");
System.out.println(fw1 == fw2); // true,共享同一对象练习题
- 内部状态和外部状态的区别?
- 享元模式的应用场景?
- String常量池是享元模式吗?