【发布时间】:2013-09-03 21:03:12
【问题描述】:
我一直在测试 Android 中的各种 orm,以便在我目前正在开发的应用程序中进行对象关系映射。
我制作了一个类图,发现在某些类中实现单例模式很有用。
正如单例模式所述,单例类必须将类的构造函数设为私有以强制执行该类的唯一实例。
从 ORMlite 帮助页面考虑这一点:
2.1.3 添加无参数构造函数
添加类和字段注释后,您还将 需要添加一个至少包的无参数构造函数 能见度。当查询返回一个对象时,ORMLite 使用 Java 反射构造对象,构造函数需要 被调用。
如何使用 ORMLite 实现这种模式?我举个例子:
ColectorPrincipal 类代表我的应用程序的用户,因为当时只有 1 人使用该应用程序,我想确保该类的时间只有 1 个实例。
public class ColectorPrincipal extends Persona {
@DatabaseField(index=true)
private String numeroColeccionActual;
private static ColectorPrincipal colectorPrincipal;
@DatabaseField(generatedId=true)
private int colectorPrincipalID;
@DatabaseField(foreign=true)
private ArrayList<Viaje> viajes;
@DatabaseField(foreign=true)
private ArrayList<Proyecto> proyectos;
@DatabaseField
private int tipoCapturaDatos;
/**
*
* @param usuario
* @param contraseña
*/
private ColectorPrincipal(String usuario, String contraseña){
super(usuario, contraseña);
setusuario(new Usuario(usuario, contraseña));
}
/**
*
* @param usuario
* @param contraseña
*/
public static ColectorPrincipal getColectorPrincipal(String usuario, String contraseña){
if (colectorPrincipal == null) {
colectorPrincipal=new ColectorPrincipal(usuario, contraseña);
}
return colectorPrincipal;
}
...
}
这个类有一些短暂的属性,也有一些持久的。
这个类还从另一个名为 Persona 的类扩展而来,它代表一个人,因此它具有姓名、电话、地址等数据……这个属性是持久的,但 Person 类不是持久的,因为我想存储来自这两个类的数据在一个表中。
public class Persona {
@DatabaseField
private String nombres;
@DatabaseField
private String apellidos;
@DatabaseField
private String direccion;
@DatabaseField
private String telefono;
@DatabaseField
private String institucion;
private Usuario usuario;
public Persona(){
}
/**
*
* @param apellidos
* @param nombres
*/
public Persona(String apellidos, String nombres){
}
...
}
是否可以让 ORMLite 实例化类 tru 单例方法 getColectorPrincipal?
【问题讨论】:
标签: java android oop design-patterns ormlite