定义
通过共享对象来尽可能减少内存使用和提高性能
UML类图
Java代码
Flyweight接口
interface Flyweight {
void operation(String extrinsicState);
}
Flyweight实现类
class ConcreteFlyweight implements Flyweight {
private final String intrinsicState;
public ConcreteFlyweight(String intrinsicState) {
this.intrinsicState = intrinsicState;
}
@Override
public void operation(String extrinsicState) {
System.out.println("Intrinsic State = " + intrinsicState + ", Extrinsic State = " + extrinsicState);
}
}
享元工厂类
import java.util.HashMap;
import java.util.Map;
class FlyweightFactory {
private final Map<String, Flyweight> flyweights = new HashMap<>();
public Flyweight getFlyweight(String key) {
Flyweight flyweight = flyweights.get(key);
if (flyweight == null) {
flyweight = new ConcreteFlyweight(key);
flyweights.put(key, flyweight);
}
return flyweight;
}
}
使用类
public class FlyweightPatternDemo {
public static void main(String[] args) {
FlyweightFactory factory = new FlyweightFactory();
Flyweight flyweightA = factory.getFlyweight("A");
flyweightA.operation("First Call");
Flyweight flyweightB = factory.getFlyweight("B");
flyweightB.operation("Second Call");
Flyweight flyweightA2 = factory.getFlyweight("A");
flyweightA2.operation("Third Call");
// Note that flyweightA and flyweightA2 are the same instance
System.out.println(flyweightA == flyweightA2); // Output: true
}
}