Flyweight模式

时间:2014-12-09 12:42:22

标签: design-patterns flyweight-pattern

任何人都可以解释下面的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;
        } 
    } 
}

感谢。

2 个答案:

答案 0 :(得分:1)

基本上代码的作用是:

调用它时会创建一个带有给定参数的临时BallFlyweight

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

如果确实如此,则从哈希表中返回实例,并允许临时实例超出范围并进行垃圾回收。

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

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

答案 1 :(得分:0)

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

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