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

时间:2015-05-28 14:17:21

标签: java oop design-patterns

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

所以,我创建了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");
    }
}

问题是每次我需要从代码的不同部分了解同一个播放器时,我必须创建一个新实例。这非常昂贵!

那么,这种特殊情况是否有设计模式?

2 个答案:

答案 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实例或对象。您也可以通过限制大小等进行多次修改。

相关问题