如何在这种特殊情况下最小化对象创建



在实现数据库结构时,我的目标是提供对玩家数据的轻松访问。

因此,我已经创建了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实例或对象包含它一旦不需要。

最新更新