2012-02-04 38 views
0

新的,这里是我problem--共享一个实例,但创造的每个新工艺

我有4个班 - 起动器,数据库和调度和测试类。

测试类将创建一个Starter的新实例(加载并启动整个过程)。 初学者初始化调度程序和数据库类。

测试类将数据传递给启动器。 Starter将其存储在Database类的HashMap中。 调度程序读取数据库类中的相同的 HashMap。

我们保证完全相同的HashMap的是所有类的访问在我的Java项目,我有2个选项,使HashMap的静态或使数据库中的一个单例类。现在我已经为数据库创建了一个单例类。

如果Test类执行此

起动starterInstance1 =新启动器的problem--();

Starter starterInstance2 = new Starter();

我该如何确保starterInstance1和starterInstance2拥有自己的Database类或HashMap的实例?

==========

就更加明显:

类测试{

入门启动1 =新入门(); //创建我的应用程序的1个实例

start1.init(); //这将初始化调度程序等,并做了一个 “getDatabaseInstance()”

对(INT I = 0;我< 50;我++){

start1.sendData(“abc”); //将所有这50个请求提交给一个线程池,该线程池将发送请求以存储在数据库类中的HashMap中。 HashMap将由Scheduler和其他类同时访问。我已经创建了数据库类singleton,以便所有类都将访问同一个数据库实例。

}

//同样创建我的应用程序的另一实例

起动START2 =新起动();

start2.init(); //现在这里如果我做“getDatabaseInstance()”,我会得到与上面相同的实例。但我想为这个应用程序的实例单独的数据库。我如何实现这一目标?

对(INT I = 0;我< 50;我++){

START2。的SendData( “ABC”);

}

}

+0

如果数据库是一个单身,我不明白他们怎么可能有不同的实例。这是单身模式的重点。你的问题的一部分说,所有的类都必须访问同一个确切的映射,另一个说每个起始器实例都应该有自己的实例。你想要什么? – 2012-02-04 08:49:42

+0

是的单身意味着只有一个实例。但我不想那样。我的整个应用程序的起点是Starter类。每当创建一个新的应用程序实例(即新的Starter())时,我希望它有自己的数据库和它自己的调度程序,它们将访问同一个数据库。使数据库成为单例类不是这里的解决方案,它意味着每个新的Starter()都将使用同一个数据库。我希望每个新的Starter()都有自己的数据库 – anzaan 2012-02-04 13:43:17

回答

1

最普遍的回答你的问题很可能是简单地让一个参考的Starter跟踪到它自己的Database。当然,Scheduler会做同样的事情:

public class Starter { 
    Database db; 
    Starter(Database db) { 
     this.db = db; 
    } 
} 

/* ... */ 

Database db1 = new Database(); 
Starter starter1 = new Starter(db1); 
Scheduler scheduler1 = new Scheduler(db1); 

Database db2 = new Database(); 
Starter starter2 = new Starter(db2); 
Scheduler scheduler2 = new Scheduler(db2); 
+0

是的,这是一种方法。但是我的应用程序有点复杂。我正在使用mina nio框架通过TCP连接传输数据。我将需要遍布我的应用程序的这个数据库的实例。所以我不能将它传递给每个班级。此外,我在客户端的SessionHandler中使用它。我不能通过数据库实例作为构造函数参数。 thnx你的建议顺便说一句! – anzaan 2012-02-04 13:49:16

+0

除非每个Starter都有自己的线程(在这种情况下,您可以将数据库存储在ThreadLocal中),否则我没有看到任何其他方式。如果您有太多需要访问数据库实例的类,那么您可能会遇到设计问题,并且缺少封装。 – 2012-02-04 13:56:45

+0

我同意你的意见。我相信这是一个设计问题。但我已经脖子深了,并在完成的结束日期!将只会讨论ThreadLocal。同时你能为此提出一个设计模式吗? – anzaan 2012-02-04 14:13:05

相关问题