-2

谁能解释 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;
        } 
    } 
}

谢谢。

4

2 回答 2

1

基本上代码的作用是:

当它被调用时,它会BallFlyweight使用给定的参数创建一个临时对象。

然后它在哈希表中查看是否已经存在与此临时实例相等(具有相同哈希码)的实例。

如果是,则它从哈希表中返回实例,并允许临时实例超出范围并被垃圾收集。

如果没有,那么它将临时添加到哈希表中(因此下次请求相同的实例时,它将被找到并返回)并返回它。

这将确保使用此函数的任何人在传递相同的值时总是会得到相同的实例(假设用于确定哈希码的函数正常工作,并且多个线程不会同时访问该代码)

于 2014-12-09T12:52:33.793 回答
0

Flyweight 使用共享,因此大量对象可以有效地拥有相同的数据或特征。享元作为数据在内存中保存方式的规范化。在大多数情况下,在大量对象之间共享的组件是不可变的。

我认为上面的代码确实是一个变种(https://en.wikipedia.org/wiki/Multiton_pattern

于 2018-02-17T14:02:27.823 回答