享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。享元模式分为内部模式(不会随着环境改变而改变共享内容,下例)和外部模式(会随着环境改变而改变共享内容)。
类图:
代码:
publicabstractclass Flyweight {
publicabstractvoid operation();
}
publicclass ConcreteFlyweightA extends Flyweight {
@Override
publicvoid operation() {
System.out.println("共享的类型A操作");
}
}
publicclass ConcreteFlyweightB extends Flyweight{
@Override
publicvoid operation() {
System.out.println("共享的类型B操作");
}
}
publicclass UnshareConcreteFlyweight extends Flyweight{
@Override
publicvoid operation() {
System.out.println("不共享的类型操作");
}
}
publicclass FlyweightFactory {
private Map<String, Flyweight> flyweights=new HashMap<String, Flyweight>();
public FlyweightFactory(){
flyweights.put("A", new ConcreteFlyweightA());
flyweights.put("B", new ConcreteFlyweightB());
}
public Flyweight getFlyweight(String key){
returnflyweights.get(key);
}
}
publicstaticvoid main(String[] args) {
FlyweightFactory ff=new FlyweightFactory();
ff.getFlyweight("B").operation();
ff.getFlyweight("A").operation();
ff.getFlyweight("A").operation();
}
优点:可以减少对象的数量,节约内存。
缺点:只适合处理粒度小的对象。
享元模式看上去像是对对象的个数限制,本人认为享元模式和创造型的工厂,单例比较相似。