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
并手动搜索所有键。这是一个简单的解决方案,但速度较慢,因为您必须搜索哈希映射中的所有键LocatorDAO
和一个长字段以节省创建时间。在创建过程中,如果哈希映射中有一个项,请检查它的创建时间,如果它早于300秒,请创建一个新实例希望这个答案(没有代码示例)足够好。注意:您可以使用ComputeFabSent简化当前代码。参见示例:不确定您的
HashMap
有多大的灵活性。它与代码的其余部分紧密耦合吗?如果是这样,您是否被迫在getInstance
中使用静态本地时间戳?