模式介绍

享元模式是一种结构型设计模式,它通过共享对象来减少内存使用,提高系统性能。享元模式将对象的状态分为内部状态和外部状态,内部状态可以被多个对象共享,而外部状态则随环境变化。

使用场景

  • 当系统中有大量相似对象时
  • 当对象的大部分状态都可以外部化时
  • 当需要缓存大量相似对象时

代码示例

// 享元接口
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("Intrinsic State: " + intrinsicState);
        System.out.println("Extrinsic State: " + extrinsicState);
    }
}

// 享元工厂
public class FlyweightFactory {
    private Map 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();
    }
}

优缺点

优点

  • 减少内存使用
  • 提高系统性能
  • 支持大量细粒度对象

缺点

  • 增加了系统复杂度
  • 状态管理较复杂
  • 需要分离内部状态和外部状态