基于经过时间的单子(或Multiton)模式

时间:2017-05-01 18:23:12

标签: java design-patterns singleton multiton

下面我已经实现了Multiton模式,但我认为这个问题同样适用于Singleton模式:

private static ConcurrentHashMap<String, LocatorDAO> instances = new   ConcurrentHashMap<String, LocatorDAO>();

public static LocatorDAO getInstance(String page String field) 
{
    String instanceID = page + " " + field; 
    LocatorDAO result = instances.get(instanceID);

    if (result == null) 
    {

        LocatorDAO m = new LocatorDAO(page, field);
        result = instances.putIfAbsent(instanceID, m);

        if (result == null)
            result = m;
    }

    return result;
}

我想通过每隔300秒实例化一个新实例来修改这个设计 - 所以如果从我们实例化前一个实例的300秒开始,我想再次实例化它(或者如果实例从未实例化过)。 / p>

怎么可以这样做?

1 个答案:

答案 0 :(得分:0)

解决方案: 创建实例时保存时间戳。每当创建新实例时,请检查保存的时间戳并找到时差。

如何实施: 至少有两种方法可以实现这一目标:

  1. 将创建时间戳添加到instanceID并手动搜索所有键。这是一个简单的解决方案,但速度较慢,因为您必须搜索哈希映射中的所有键。

  2. 实现一个bean类,它将包含两个字段LocatorDAO和一个长字段以节省创建时间。在创建过程中,如果哈希映射中有项目,请检查它的创建时间,如果它超过300秒,则创建一个新实例

  3. 希望这个答案(没有代码示例)足够好。