我被分配了一个IT项目,我们必须编写各种不同的GUI来做各种事情。我们也在使用数据库。我们假设我们正在访问" EntityManager"在一个名为"数据库":
的类中public class GUI1 {
private Database myDatabase;
public void setDatabase(Database DB){
myDatabase = DB;
}
}
public class GUI2 {
private Database myDatabase;
public void setDatabase(Database DB){
myDatabase = DB;
}
}
public class GUI3 {
private Database myDatabase;
public void setDatabase(Database DB){
myDatabase = DB;
}
}
etc...
让我们说我" GUI1"我想切换到" GUI3"。初始化" GUI3"我必须通过" myDatabase"通过" setDatabase()"来引用它方法,但如果我想回到" GUI1",我将不得不再次传回数据库参考...
到目前为止,我有大约15个GUI,当我知道可以轻松替换时,复制并粘贴相同的代码会很烦人。在这种情况下,在"数据库"中使用静态引用到我想要的内容是不正确的。而不是传递我所有的" GUI *"之间的引用。班?
答案 0 :(得分:2)
创建一个单独的数据库对象,每个人都访问同一个对象:
public class Database {
private Database(){ // privatize the constructor
// your code here
}
private static Database INSTANCE;
public static Database getInstance() {
if(INSTANCE == null) {
// let's make it thread-safe
synchronized(Database.class) {
if(INSTANCE == null) // may have changed in the mean while
// by other thread
INSTANCE = new Database();
}
}
return INSTANCE;
}
}
编辑:更好的是,从线程安全的角度来看是enum
:
public enum Database {
INSTANCE(); // pair of parenthesis, for constructor
Database() { // constructor
// your code here
}
public static Database getInstance() {
return INSTANCE;// initialization controlled by system
}
public void someMethod(){
// even allows you to add custom methods
}
}