Skip to content

享元模式

基础概念

什么是享元模式?

答案: 享元模式(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,共享同一对象

练习题

  1. 内部状态和外部状态的区别?
  2. 享元模式的应用场景?
  3. String常量池是享元模式吗?

Released under the MIT License.