Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于运行时间的单态(或多态)模式_Java_Design Patterns_Singleton_Multiton - Fatal编程技术网

Java 基于运行时间的单态(或多态)模式

Java 基于运行时间的单态(或多态)模式,java,design-patterns,singleton,multiton,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 ins

下面我已经实现了
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;
}
私有静态ConcurrentHashMap实例=新ConcurrentHashMap();
公共静态定位器DAO getInstance(字符串页字符串字段)
{
字符串instanceID=页面+“”+字段;
LocatorDAO结果=instances.get(instanceID);
如果(结果==null)
{
LocatorDAO m=新的LocatorDAO(页面,字段);
结果=instances.putIfAbsent(instanceID,m);
如果(结果==null)
结果=m;
}
返回结果;
}
我想通过每300秒实例化一个新实例来修改这个设计-因此,如果从我们实例化前一个实例的时间算起已经过去了300秒,我想再次实例化它(或者如果该实例从未实例化)


如何做到这一点?

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

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

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

  • 实现一个bean类,该类将有两个字段
    LocatorDAO
    和一个长字段以节省创建时间。在创建过程中,如果哈希映射中有一个项,请检查它的创建时间,如果它早于300秒,请创建一个新实例


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

    注意:您可以使用ComputeFabSent简化当前代码。参见示例:不确定您的
    HashMap
    有多大的灵活性。它与代码的其余部分紧密耦合吗?如果是这样,您是否被迫在
    getInstance
    中使用静态本地时间戳?