每个开发人员必须知道的设计模式?

时间:2009-08-08 02:42:00

标签: java hibernate design-patterns spring

每个开发人员必须知道哪些设计模式?

我对使用Spring和Linux的Java Web开发人员的上下文感兴趣。休眠。我经常听说,设计模式方面的良好知识对于使用这些框架至关重要。任何人都可以列出细节吗?

例如,我知道理解抽象工厂&工厂模式,单身模式等绝对必不可少。我正在寻找一份全面的清单。

11 个答案:

答案 0 :(得分:19)

Inversion of Control

如果您打算设计解耦系统,则需要知道如何正确链接类之间的依赖关系。

Command Pattern and Variants

特别是在Java中,由于缺少语言中的闭包和函数指针,因此必须学习如何将一个功能作为对象传递给另一个方法。

Factory Pattern

工厂在Java框架中无处不在,了解为何以及何时使用工厂模式至关重要。

Singleton (pattern and anti-pattern)

学习如何负责任地使用单例模式非常有助于理解您可能正在阅读的其他人的代码中的陷阱。

总体而言,学习为什么关于模式更重要的是如何。知道什么时候不应用模式与知道什么时候一样重要。

答案 1 :(得分:5)

每个人都应该知道关于 Singleton,还有时才能使用它!在目前的工作项目中,这对我来说是一个很大的痛苦来源。

单身人士使代码难以理解和遵循,并使编写单元测试变得更加困难。我喜欢博文Singletons are Pathological Liars

答案 2 :(得分:4)

模型 - 视图 - 控制器只需要在列表中,Spring有一个MVC框架:

http://en.wikipedia.org/wiki/Model–view–controller

答案 3 :(得分:4)

大多数设计模式非常明显 - 如果你已经编程了几年,你就已经知道并使用它们了。

我发现设计模式的最大优势是共享一组共同的名称。如果有人说“Callback”可能意味着很多事情,但是如果有人说“Listener Pattern”意味着更具体的一组调用并暗示了对象之间更高层次的关系。

所以从本质上讲,阅读一本好的设计模式书,了解每个模式的名称,花一些时间了解你不知道的任何一个,并且你很高兴。

我不会完全忽略它们中的任何一个 - 它们都很好看。您应该能够识别出可能从特定模式中受益的情况,并知道在哪里寻找更多有关它的信息。

答案 4 :(得分:3)

我建议你阅读Head First Design Patterns本书。这是一本关于所有公共和有用模式的书。

答案 5 :(得分:2)

我建议您阅读并阅读“设计模式”一书,因为它为您提供了词汇量。

答案 6 :(得分:2)

但不要忘记基本面:)

在我眼中用Java眼泪采访Java开发人员 http://java.sys-con.com/node/1040135

答案 7 :(得分:1)

休眠?那么工作单位是必须http://martinfowler.com/eaaCatalog/unitOfWork.html

Composite,它出现在JUnit框架中。 (试验测试用例-的TestSuite)

适配器,构建器,命令,模板方法和策略模式很容易,并且通常可以在实践中使用。

状态模式也帮助我清理了遗留源代码中的混乱。

答案 8 :(得分:1)

这是对Greg Hewgill提到的“Singletons Are Pathological Liars”的评论,但我还不能发表评论。

那篇文章提出了一个令人信服的案例,但他的愤怒是错误的。正如他博客上的几位评论者所说,他的问题实际上是全球性的。他的代码修复仍然可以使用单例,并且仍然可以获得清晰度和可测试性的准确增加。

重读这篇文章。他并不担心OfflineQueue需要初始化的数据库实例,也不需要CreditCardProcessor需要初始化的OfflineQueue。他担心这些依赖关系不可见,这会导致可维护性和可测试性问题。

他的问题在于秘密的全球状态(这是否让我听起来像是一个阴谋理论家?)。

然而,他(imo)误解了这个秘密的全球国家是单身人士的错。

这并不意味着我赞成单身人士,他们没有必要 - 当然,他们有缺点(包括明显的线程争用瓶颈可能性)。但我更愿意清楚我正在避免的做法。

顺便提一下,我会进一步进行重构 - 基于类名,我会在代码审查中断言,CreditCardProcessor应该处理收费,而不是他的:

    card.charge(cardProcessor, 100);      

我有这个,而不是:

    cardProcessor.chargeCard (card, 100);

(是的,我用他认为更易读的名字替换了他的变量名cccp

答案 9 :(得分:1)

除了您已引用的Abstract factoryFactory MethodSingleton模式之外,我认为以下模式很有用。

桥接模式:抽象和实施可以独立更改

装饰器模式:在运行时更改对象的行为

中介模式:在不同对象之间启用中央通信媒体

责任链:如果要向Web服务请求添加过滤器,这非常有用。

策略模式:如果您想通过检查参数在运行时从一系列算法更改算法

外观模式:如果您的系统中有许多服务,并且不想将所有服务公开给客户端,请使用一个Facade类,它将与其他服务进行交互。

sourcemaking提供了有关每种设计模式的优秀详细信息: Intent,Strucutre,Checklist和经验法则。

另外一个SE问题肯定会对你有所帮助:

Design Patterns web based applications

答案 10 :(得分:-1)

Singleton - Singletons显然可以而且应该用于所有事情