任何人都可以解释下面的Flyweight模式代码如何工作:
public class FlyweightFactory {
Hashtable hash = new Hashtable();
public BallFlyweight getFlyweight(int r, Color col, Container c, AStrategy a) {
BallFlyweight tempFlyweight = new BallFlyweight(r,col,c,a),
hashFlyweight = ((BallFlyweight)hash.get(tempFlyweight));
if(hashFlyweight != null)
return hashFlyweight;
else {
hash.put(tempFlyweight,tempFlyweight);
return tempFlyweight;
}
}
}
感谢。
答案 0 :(得分:1)
基本上代码的作用是:
调用它时会创建一个带有给定参数的临时BallFlyweight
。
然后查看哈希表以查看是否存在与此临时实例相同(具有相同哈希码)的实例。
如果确实如此,则从哈希表中返回实例,并允许临时实例超出范围并进行垃圾回收。
如果它没有,那么它会将临时的一个添加到哈希表中(所以下次请求相同的实例时它将被找到并返回)并返回它。
这将确保使用此函数的任何人在传递相同值时始终获得相同的实例(假设用于确定哈希码的函数正常工作,并且多个线程不同时访问代码)
答案 1 :(得分:0)
Flyweight使用共享,因此大量对象可以有效地拥有相同的数据或功能。 flyweight用于规范数据在内存中的保存方式。在大多数情况下,在大量对象之间共享的组件是不可变的。
我认为上面的代码实际上是一个mutiton(https://en.wikipedia.org/wiki/Multiton_pattern)