享元模式
享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享对象来减少内存使用和提高性能。享元模式适用于需要创建大量相似对象的情况,通过共享这些对象的内部状态,可以显著减少对象的数量。
下面是一个简单的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;
}
public void operation() {
System.out.println("ConcreteFlyweight: " + intrinsicState);
}
}
// 享元工厂类
class FlyweightFactory {
private Map<String, Flyweight> flyweights = new HashMap<>();
public Flyweight getFlyweight(String key) {
if (flyweights.containsKey(key)) {
return flyweights.get(key);
} else {
Flyweight flyweight = new ConcreteFlyweight(key);
flyweights.put(key, flyweight);
return flyweight;
}
}
}
// 客户端代码
public class FlyweightPatternExample {
public static void main(String[] args) {
FlyweightFactory factory = new FlyweightFactory();
Flyweight flyweight1 = factory.getFlyweight("A");
flyweight1.operation();
Flyweight flyweight2 = factory.getFlyweight("B");
flyweight2.operation();
Flyweight flyweight3 = factory.getFlyweight("A");
flyweight3.operation();
}
}
在上述示例中,我们定义了一个共享的抽象享元类 Flyweight
,其中包含一个 operation()
方法。
然后,我们实现了具体享元类 ConcreteFlyweight
,它实现了 Flyweight
接口,并持有一个内部状态 intrinsicState
。
接着,我们创建了享元工厂类 FlyweightFactory
,它维护了一个享元对象的缓存池 flyweights
。在 getFlyweight()
方法中,我们通过检查缓存池是否存在对应的享元对象,如果存在则直接返回,否则创建新的享元对象并添加到缓存池中。
在客户端代码中,我们实例化了享元工厂对象 FlyweightFactory
,并通过调用 getFlyweight()
方法获取享元对象。在多次获取同一个内部状态的享元对象时,实际上是获取的同一个对象实例。
享元模式的关键思想是共享对象的内部状态,以减少对象的数量。通过共享相同的内部状态,可以节省内存空间,并提高系统的性能。需要注意的是,享元模式将对象的内部状态与外部状态分离,内部状态是可以共享的,而外部状态是变化的,每个对象都需要独立维护。
标签:享元,getFlyweight,对象,10.18,Flyweight,operation,intrinsicState From: https://www.cnblogs.com/luoqingci/p/18556263