你使用哪些反模式,即使你知道你不应该使用它们?

5

我是不是唯一一个在某些设计情况下,有时会采取看似简单但错误的方式?我承认我曾经创建过一些可疑的Singleton对象。除此之外,我也会为了让事情变得更容易而创建一个God对象或两个。

你是否会使用反模式,尽管你知道不应该这样做?


我对单例模式很好奇。懒惰的方法是只使用普通的全局变量,那么为什么要费心去使用一个复杂的反模式呢?全局变量可能不好,但它们通常比单例模式更少出问题。而且编码也更容易。 - jalf
1
我的看法是,单例模式本质上是一种糟糕的设计模式,只有在极少数的硬件驱动程序情况下才能使用。在大多数其他情况下,它们只会引入全局状态到我的面向对象编程环境中,从而损害了可移植性等设计质量目标。 - Per Stilling
继上一条评论 - 然而,我经常通过以下逻辑来证明单例模式的使用:“我只需要其中一个,所以我将其设置为单例”,即使我内心深处真正想要的是全局变量。 - Per Stilling
1
Re 单例模式;有些语言不允许静态接口成员 - 因此单例模式是在接口上提供类似静态方法的一种方式(只有一个实例可以表示一个接口)。 - Marc Gravell
单例模式与静态/全局变量的真正用途在于单一初始化点,但至少.NET提供了静态构造函数来实现这一点。 - Simon Buchan
6个回答

6

很容易尝试让某些东西变得灵活,结果却出现了内部平台效应,例如我有时候会使用内部数据库。

有时候我们太想自己编写代码,而不是使用预先准备好的类似版本 - 非此即彼。我尽量避免这样做,但是......


5

2
上帝对象反模式”是一种容易犯的错误。有时它似乎分解类太过繁琐,但在某个时刻你可能会为此付出代价。我发现这种反模式常常与紧耦合耦合一起出现。
“供应商锁定反模式”也很难避免,特别是当你使用特定于某个供应商的语言时。

你可能想把那个编辑成“上帝”。 - CTT
我喜欢“gob object”的想法 - 就像是一只嘴巴很大但实际上并没有做太多事情的复杂对象。 - Tom
我其实以为你在用俚语。可惜你改了,本来可以开创新的风潮,呵呵。 - Per Stilling
不幸的是只是一个打字错误。在飞快地写答案之前,我可能应该先阅读问题的正文。现在我看到上帝对象也在问题中。 - Chris de Vries


1

在评论中,我认为这应该是一个答案 - 单例模式。

当一种语言(如Java)不支持全局变量时,这是实现全局变量的一种方式。这是其中一种模式,你永远不应该使用 - 除非你需要它。重要的是要能够区分何时需要全局变量(有时候确实需要),以及何时只是想要一个。

单例模式存在问题,除了引入全局状态的严重问题之外,在Java中,它们仅在类加载器内部是唯一的,如果有多个类加载器,则可能会出现多个副本。


0

供应商锁定

通常会添加一个供应商特定的东西,以实现某个特定的功能,因为这样做比自己编写更有意义。后来我经常会为这个决定而感到后悔。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接