Java中的数据库和密封化
我正在学习Java,我想保存应用程序状态。在面向对象编程中,我们应该隐藏实现并通过接口共享功能。在我不需要从数据库中恢复数据之前,它可以正常工作 比如说。如果应用程序包含IdGenerator类构建和使用的单例设计模式,我可以使用它在对象创建期间生成唯一的ID。所以接口只共享getId()方法。但是如果我想从数据库中恢复对象呢?我只需要使用setId()方法来恢复对象。有什么解决方法吗(我指的是解决问题的设计模式)? 我对Spring和JUnit也有同样的问题。我不知道我是否不理解一些东西,或者它迫使我们对所有我们想要注入的东西使用getter和setter 我创建了示例项目: 在包模型中。人员是接口人员:Java中的数据库和密封化,java,sql,dao,Java,Sql,Dao,我正在学习Java,我想保存应用程序状态。在面向对象编程中,我们应该隐藏实现并通过接口共享功能。在我不需要从数据库中恢复数据之前,它可以正常工作 比如说。如果应用程序包含IdGenerator类构建和使用的单例设计模式,我可以使用它在对象创建期间生成唯一的ID。所以接口只共享getId()方法。但是如果我想从数据库中恢复对象呢?我只需要使用setId()方法来恢复对象。有什么解决方法吗(我指的是解决问题的设计模式)? 我对Spring和JUnit也有同样的问题。我不知道我是否不理解一些东西,或者
public interface Person {
long getId();
Person setName(String name);
String getName();
}
因此,同一个包具有实现类:
public class PersonImpl implements Person {
private long id;
private String name;
public PersonImpl(String name){
this.id = IdGenerator.getInstance().getID();
}
@Override
public long getId() {
return this.id;
}
@Override
public Person setName(String name) {
this.name = name;
return this;
}
@Override
public String getName() {
return this.name;
}
}
IdGenerator类如下所示:
public class IdGenerator {
private static IdGenerator instance;
private long lastId;
private IdGenerator(){
lastId = 0;
}
public static IdGenerator getInstance(){
if (instance==null){
instance = new IdGenerator();
}
return instance;
}
public long getID(){
return lastId++;
}
}
因此,每个对象的id都是唯一的,不能更改。这是Person接口不提供名为setId()的方法的原因;因此,我可以创建任何用于从数据库或文件还原数据的类:
public class DataLoader {
public boolean loadData(String filePath){
.
.
.
.
long loadedId = ....
String loadedName = ....
Person personRestoredObject = PersonImpl(loadedName);
}
}
但它无法还原旧id。id是由构造函数创建的。那么这个问题有什么设计模式吗
我看到了一个解决方案,通过添加一个Factory类,该类可以访问包级别上的setId()方法,或者只在包级别上可用的特殊构造函数。但我不认为在实践中不提供setId()方法的可能性,因为这样我就无法恢复对象的数据源。我错了吗?如果您能提供一些代码示例,这将有助于我们更好地理解问题。好的。我将添加它。您可能正在寻找一个(ORDBMS),它将存储为对象而不是“关系表”。如果您能提供一些代码示例,它将帮助我们更好地理解这个问题。好的。我将添加它。您可能正在寻找一个(ORDBMS),它存储为对象而不是“关系表”