正确使用单例设计模式

时间:2012-01-02 23:05:24

标签: java oop design-patterns singleton

我正在运行服务器,有时必须搜索客户端查询的内容。我想将客户端查询写入磁盘以获取记录,但我不想放慢搜索速度。 (搜索已经成为瓶颈......)

因此,当客户端执行搜索时,我让客户端的线程向单个线程发送消息,该线程将处理磁盘写入,而客户端线程继续处理客户端的请求。这样,磁盘上的文件就不会遇到同步问题,也不会降低客户端的体验速度。

我在这里有一个概念性问题:在这种情况下单身是否合适?在我最近的编程中,我一直在使用单例设计模式,我想确保我将它用于预期用途。

非常感谢任何反馈。

1 个答案:

答案 0 :(得分:7)

singleton pattern肯定被过度使用,并附带difficulties的份额(单位测试是典型的例子),但是就像设计中的所有内容一样,你需要权衡你的具体优缺点场景。单例模式确实有其用途。有些选项可以让您获得单身行为,同时减轻一些固有问题:

Interception(通常被称为面向方面的编程,虽然我看到辩论他们并不是完全相同的东西......但是在这个时候找不到我在这篇文章中读到的文章)肯定是一个选项。您可以使用构造注入,decorator模式,抽象工厂和inversion of control container的任意组合。我没有使用我的Java IoC容器,但是有一些允许自动拦截的.Net容器(我相信Spring.Net确实如此,因此Spring(Java)很可能内置了这个容器)。这对于任何类型的横切关注点非常方便,您需要跨多个层执行某些类型的操作(安全性,日志记录等)。此外,大多数IoC容器允许您控制生命周期管理,因此您可以将记录器视为单例,而无需手动实际实现单例模式。

总结一下。如果一个单身人士适合你的场景(从你的描述看似合理),那就去吧。只要确保你已经权衡了利弊。您可能想尝试不同的方法并比较两者。