是用于访问/维护数据库和网络连接单的方式向右(Is singleton approach right

2019-10-17 21:38发布

所以,我的工作,需要一个本地数据库连接,并使用一些Web服务来背来回发送和接收数据,以及应用程序。

  • 每当我需要和数据库的操作,然后创建我的对象DbConnection(这是我使用让我的数据库之类的名称),并在同一个执行操作。

  • 同样,对于具有互联网连接我用DefaultHttpClient并创建一个static相同的对象,每当需要得到连接,并调用web服务创建HttpResponse对象,并得到响应数据。

1)我在用正确的方法或模式?

2)同样一两件事,专注于点2号做静态和辛格尔顿工作以同样的方式?

Answer 1:

我在用正确的方法或模式?

我不认为如此。 如果使用单(或静态) 的连接 ,然后如果需要使用/在上下文那里可能需要一个以上的连接重用你的代码中,很难; 例如,如果你让你的应用程序的多线程,或者把它变成一个库。

单身也有相对于可测试性的问题...

一般来说,任何你可以单身(或静态),你也可以做一些类型的上下文参数。 依赖注入(DI)框架提供了一个巧妙的方法来创建共享对象和“线”他们到需要它们的其他对象......不用单身或静态。 或者,你可以手工做,以各种不同的方式。

是否静止和辛格尔顿的工作方式相同?

单身是一种设计模式。 静是Java语言的功能,可以用来实现Singleton模式。 因此,他们是不一样的东西(甚至是同一类的话 ),但它们是相关的。



Answer 2:

没有单身都是坏的。 避免它们,除非你不得不使用它们(因为一些愚蠢的框架,让你没有其他选择)

  • 他们并没有什么意义,什么是一个全局变量是什么意思? 如果你有多个类加载器? 如果您运行同一程序两次是什么?
  • 他们会隐藏时空耦合。 单A必须单B之前被初始化,而不是之前的单身C或D.单大多数人甚至不知道如何控制初始化时间Java中的一个单例。 (基本上你必须触摸静态字段,以确保它的初始化,但不要太早接触它,否则你会打破秩序!)
  • 它们会导致安全漏洞,如果你在一个安全的环境是,如安全管理器,或像E.安全语言
  • 很难使他们在多线程代码工作。 硬作中,只有几千人在世界上懂得这个“正确”做像Java,它仍然需要intermodular分析,以得到正确的,除非你只是编码的东西模仿角色的模型,这违背了语言Java并发的目的
  • Java语言规范(吉拉德·布拉彻)的合着者甚至说单身是可怕的,没有他们做了一个新的语言(新语)

要么你传递一些对象周围,或你所面临的上述问题加上更多我可能忘了提。 为什么会有如此世俗的问题在2013年依然存在,我是无法理解。



Answer 3:

哇。 有很多事情需要你的问题比你想象的,而是给你的短,短的答案,大部分项目我见过(不使用ORM,你可能要考虑的东西)将它包装类各地调用所有适当的查询的数据库对象,处理转义&C。 这将实现一个公共接口,以便它可以由一个工厂类来提供达到一些东西,期待一个匹配的接口。

至于辛格尔顿/静态的,嗯,这实际上取决于你的需要。 在我上面提到的模式,单件将是远远优于:它意味着每个访问所述数据库中的对象的将是能够存储本地参考db对象。 这也意味着,你可以封装在父类中获取单例的过程。 静态类的使用将买不起你的选择。



Answer 4:

答案1点 - 是单是正确的做法。 理想情况下,你必须建立数据库只有一个连接。 Sinleton将帮助你实现这一目标。

答到点2 - 没有静态不一定OWRK方式与单相同。 如果我们多次调用在单例模式创建的对象,它返回相同的对象。 但是,静态对象可以创建多个次,如果创建对象多次调用。

但是你可以保证只创建一次静态对象,那么这将是相同的单例模式。



文章来源: Is singleton approach right for accessing/maintaining database and internet connection