在实施数据库结构时,我的目标是提供对玩家数据的轻松访问。
所以,我创建了User
类,它包含一个Json
实例,并公开了从中获取特定信息的方法。
public class User {
private Json data;
public User(OfflinePlayer player) {
File path = new File(player.getUniqueId() + ".json");
data = new Json(path);
}
public boolean isPremium() {
return data.getBoolean("premium");
}
}
问题是每次我需要从代码的不同部分了解同一个播放器时,我必须创建一个新实例。这非常昂贵!
那么,这种特殊情况是否有设计模式?
答案 0 :(得分:3)
这是一个简单的缓存。如果您使用的是ORM,例如hibernate,则可以使用二级缓存。
您还可以将唯一用户标识符(UUID id)作为键,将用户数据作为Map中的值。 因此,当您收到用户数据请求时,首先要查看您是否在缓存(Map)中拥有此uuid的用户,如果您这样做则返回数据。
如果您没有,请进入数据库并获取数据。
答案 1 :(得分:2)
尝试像这样创建Map
:
User user = null;
Map<UUID, User> usermap = new HashMap<>;
//before creating new user instance check if its present in Map
if(usermap.containskey(id){
//get user from Map
user = usermap.get(id);
else{
//not in map so create new User
user = new User(id);
usermap.put(id,user);
}
//use user object
但请注意,一旦不需要,请销毁包含它的usermap实例或对象。您也可以通过限制大小等进行多次修改。