结构图
模式说明
类设计
模式说明
- 扩展点在享元接口Flyweight的实现类。
- Flyweight的实现由共享和非共享两种,Condition作为外部条件封装,提供给Flyweight操作方法使用参数。
- 客户端不需要知道具体使用哪个Flyweight实现,只需要根据key按需取用即可。
- 运用享元可有效支持大量细粒度的对象。
public static void main(String[] args) {
Condition condition = new Condition();
FlyweightFactory ff = new FlyweightFactory();
Flyweight fx = ff.getFlyweight("X");
fx.operation(condition);
Flyweight fy = ff.getFlyweight("Y");
fy.operation(condition);
Flyweight fz = ff.getFlyweight("Z");
fz.operation(condition);
Flyweight uf = new UnsharedConcreteFlyweight();
uf.operation(condition);
}
类设计
public interface Flyweight {
public void operation(Condition condition);
}
public class ConcreteFlyweight implements Flyweight {
@Override
public void operation(Condition condition) {
System.out.println("concrete operation:" + condition);
}
}
public class UnsharedConcreteFlyweight implements Flyweight {
@Override
public void operation(Condition condition) {
System.out.println("unshared concrete operation:" + condition);
}
}
public class FlyweightFactory {
private Map<String, Flyweight> flyweights = new HashMap<String, Flyweight>();
public FlyweightFactory() {
flyweights.put("X", new ConcreteFlyweight());
flyweights.put("Y", new ConcreteFlyweight());
flyweights.put("Z", new ConcreteFlyweight());
}
public Flyweight getFlyweight(String key) {
return flyweights.get(key);
}
}
public class Condition {
}