享元模式(Flyweight Pattern)是Java开发中常用的设计模式之一,属于结构型设计模式,用于通过共享对象
来减少内存使用和提高性能。享元模式通过共享细粒度的对象,以减少重复对象的创建
,从而节省内存空间,下面用Java代码来看看它的用法吧。
import java.util.HashMap;
import java.util.Map;
// 享元接口
interface Flyweight {
void operation();
}
// 具体享元类
class ConcreteFlyweight implements Flyweight {
private String intrinsicState;
public ConcreteFlyweight(String intrinsicState) {
this.intrinsicState = intrinsicState;
}
@Override
public void operation() {
System.out.println("intrinsicState: " + intrinsicState);
}
}
// 享元工厂
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 class FlyweightPatternExample {
public static void main(String[] args) {
FlyweightFactory factory = new FlyweightFactory();
Flyweight flyweight1 = factory.getFlyweight("key1");
flyweight1.operation();
Flyweight flyweight2 = factory.getFlyweight("key2");
flyweight2.operation();
}
}
优点:
减少内存使用
,通过共享对象减少重复创建。提高性能
,减少对象的创建和销毁次数。- 可以在需要
大量相似对象
的情况下节省内存空间。
缺点:
- 可能会导致系统复杂性增加,因为需要
管理共享对象和非共享对象
。 - 共享对象的状态是外部状态,需要
确保线程安全
。
使用场景:
- 当需要创建大量相似对象且
内存使用较大
时,可以考虑使用享元模式。 - 当需要
缓存对象
以提高性能时,享元模式是一个很好的选择。