在实现数据库结构时,我的目标是提供对玩家数据的轻松访问。
因此,我已经创建了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");
}
}
问题是,我必须创建一个新的实例,每次我需要从我的代码的不同部分了解相同的播放器。那太贵了!
那么,对于这种特殊的情况有什么设计模式吗?
这是一个简单的缓存。如果您正在使用ORM(如hibernate),则可以使用二级缓存。
还可以将唯一用户标识符(UUID id)作为键,将用户数据作为Map中的值。因此,当您获得用户数据请求时,您首先查看是否在缓存(Map)中有具有此uuid的用户,如果有则返回数据。
如果你没有,那就去数据库中获取数据
试着创建一个这样的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实例或对象包含它一旦不需要。