Flyweight 描述一个接口,通过这个接口flyweight可以接受并作用于外部状态。[code=java]public interface Flyweight {
void action(int arg);
}[/code]ConcreteFlyweight 实现Flyweight接口,并为内部状态(如果有的话)增加存储空间。
ConcreteFlyweight对象必须是可共享的。它所存储的状态必须是内部的;即,它必须独立于ConcreteFlyweight对象的场景。[code=java]public class FlyweightImpl implements Flyweight {
public void action(int arg) {
// TODO Auto-generated method stub
System.out.println("参数值: " + arg);
}
}[/code]FlyweightFactory创建并管理flyweight对象。
确保合理地共享flyweight。当用户请求一个flyweight时,FlyweightFactory对象提供一个已创建的实例或者创建一个(如果不存在的话)。[code=java]public class FlyweightFactory {
private static Map flyweights = new HashMap();
public FlyweightFactory(String arg) {
flyweights.put(arg, new FlyweightImpl());
}
public static Flyweight getFlyweight(String key) {
if (flyweights.get(key) == null) {
flyweights.put(key, new FlyweightImpl());
}
return flyweights.get(key);
}
public static int getSize() {
return flyweights.size();
}
}[/code]测试[code=java]public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Flyweight fly1 = FlyweightFactory.getFlyweight("a");
fly1.action(1);