有人能给我一个过度使用设计模式的例子吗?

时间:2009-01-21 19:08:01

标签: language-agnostic design-patterns oop

我一直在听到和阅读人们遇到过度使用设计模式的案例。好吧,错过设计模式是可以理解的现象。它实际上意味着过度使用设计模式?

您是否有任何示例,为什么您认为模式太多?

13 个答案:

答案 0 :(得分:23)

singleton可能是overused design pattern最多的factory pattern。我经常看到它在许多情况下使用,当它超出范围时,更适合直接实例化对象。

在那之后,我相信{{3}}被过度使用作为实例化对象的快捷方式,很多时候没有真正的需要。

答案 1 :(得分:10)

面向对象,它不再是一种设计模式,而是一种生活方式。我已经看到很多程序代码在对象和大量对象中被广泛用于对象,因为时代精神说“大概你是面向对象的”,当几行C和一个结构也能做到时。 / p>

我认为这是最过度的设计模式,因为它(可能)是最广泛使用的设计模式,其优点很少受到质疑。

答案 2 :(得分:7)

我投票支持ActiveRecord。

许多流行的数据访问框架使用ActiveRecord作为唯一的数据访问模式,这是一种一刀切的解决方案,尽管Martin Fowler的书籍“企业应用程序架构模式”描述了几种其他数据访问模式,每个模式的细节优势以及如何决定何时使用每个模式。

答案 3 :(得分:5)

我猜 Singleton 很容易被滥用(尽管它确实有其合法用途)。

对单身人士模式的成瘾称为Singletonitis。 :)症状至少包括不必要的高耦合,测试变得更加困难。

编辑:作为Singletonitis的治疗方法,您可以尝试 Inline Singleton ,由Joshua Kerievsky在Refactoring to Patterns中描述。

编辑2 :有关单身人士的详细讨论,请参阅此问题:What is so bad about Singletons

答案 4 :(得分:5)

(有时)所谓的JavaBeans-Pattern:每个字段的getter和setter。 Highly questionable并且非常普遍。

答案 5 :(得分:4)

PREAMBLE:一般来说,Singleton被认为是最滥用的模式,如果只是因为很多人会用它来编写内联编程实际上,如果不是实际的,而其他人用它来代替全局变量。

BODY:有一本名为“模式语言”的书,它在杰出的GoF之前已经有好几年了。它要求在项目的不同方面使用类似的语言 - 这显然是对“设计模式”的主要影响,而那些知道两种文本的人认为它更优越。

我个人的经验是,GoF仅在某些情况下有用,与包含所有OOP相差甚远。我实际上觉得很有趣的是,有些模式在其他语言中已经过时了,而其他模式只是冗余地描述了相同的场景(在适应和翻译的东西之间真的有那么大的区别吗?)

一般来说,模式是一件好事。 Singletons通常使用静态getInstance方法是很好的。许多MVC结构使用类似的命名约定是很好的。另一方面,模式不是一切,需要记住。

推荐阅读: http://perl.plover.com/yak/design/

答案 6 :(得分:3)

单例模式,仅适用于极少数情况,使测试更加困难。它不仅过度使用,而且通常在Java和C#中实施得非常糟糕 - 当人们不仅不合适而且相对难以正确使用时,人们常常会急于进行双重检查锁定。

编辑:我真的应该意识到每个人都会发布同样的事情。

下一个示例,工厂模式,特别是它在Java DOM API中的使用。布莱什。

答案 7 :(得分:2)

我会说Singleton被过度使用了。通常有比使用本质上是全局变量更好的解决方案。

答案 8 :(得分:2)

我要权衡过度使用的辛格尔顿。很多时候,开发人员只学习这一种模式,并在静态类同样有效时使用它。

答案 9 :(得分:2)

我认为比过度使用设计模式更糟糕的问题是热情的开发人员误用了模式,他们最近学会了一种新的模式工具并决定他们需要尝试一下。最近我一直在阅读一些关于依赖注入的Misko Hevery的博客(http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/)条目。他的一个主要断言是,作为全局实例实现的单例模式严重限制了可测试性,应该避免。

几天前,我读到了Christian Gruber博客中有关模式的有趣观点。他认为它们可以作为讨论架构的工具,但不应该在设计构思期间使用,以免软件架构恶化为他所谓的“数字绘画”。请参阅设计模式的段落:http://www.geekinasuit.com/2008/12/testability-re-discovering-what-we.html

因此,设计模式的问题可能是由于所有设计良好的软件必须符合“四人帮”中描述的模式之一而导致的误用和隧道视觉。

答案 10 :(得分:1)

这实际上是由我们唯一的杰夫阿特伍德讨论编码恐怖:

http://www.codinghorror.com/blog/archives/000380.html

答案 11 :(得分:1)

我一直看到只有一个提供商使用的提供商模式。这似乎是一项非常多的额外工作而没有任何好处。

答案 12 :(得分:0)

我也投票支持辛格尔顿:全球抽象服装。

和Factory,因为这样可以更容易地不考虑对象在给定程序中如何连接在一起。