我正在研究模式和反模式。我对模式有一个清晰的概念,但我没有反模式。来自网络和维基百科的定义让我很困惑。

有人能用简单的话给我解释一下什么是反模式吗?目的是什么?他们做什么?这是好事还是坏事?


当前回答

就像设计模式一样,反模式也是一个模板,也是解决某个问题的可重复方式,但是以非最佳和无效的方式。

其他回答

当您以非法的方式滥用设计模式,或者您不知道它的实际用法时,有时会使用它。例如,为简单类使用构建器模式,或者为代码中使用的每个Active类定义一个单例实例。

它也可能超出了设计模式。例如,在Java中将局部变量定义为final,或者当您可以简单地检查输入是否为空时使用try / catch作为NullPointerException,或者在使用对象(就像您在其他一些语言中所做的那样)后将其置空,而您没有注意到垃圾收集机制,或者调用system.gc()以使内存为空,以及许多其他误解,这些很可能被认为是Cargo-Cult现象。

反模式是软件开发中被认为是糟糕编程实践的某些模式。

设计模式是解决常见问题的常用方法,已经形式化,通常被认为是一种很好的开发实践,与之相反,反模式是不可取的。

例如,在面向对象编程中,思想是将软件分割成称为对象的小块。面向对象编程中的反模式是一个上帝对象,它执行许多功能,最好将这些功能分离到不同的对象中。

例如:

class GodObject {
    function PerformInitialization() {}
    function ReadFromFile() {}
    function WriteToFile() {}
    function DisplayToScreen() {}
    function PerformCalculation() {}
    function ValidateInput() {}
    // and so on... //
}

上面的例子有一个对象可以做所有事情。在面向对象编程中,最好为不同的对象定义明确的职责,以减少代码的耦合,最终更易于维护:

class FileInputOutput {
    function ReadFromFile() {}
    function WriteToFile() {}
}

class UserInputOutput {
    function DisplayToScreen() {}
    function ValidateInput() {}
}

class Logic {
    function PerformInitialization() {}
    function PerformCalculation() {}
}

总的来说,有很多使用常用模式(设计模式)开发软件的好方法,但是也有一些开发和实现软件的方法可能会导致问题。被认为是糟糕的软件开发实践的模式是反模式。

任何对给定的软件开发环境弊大于利的设计模式都被认为是反模式。

有些反模式是明显的,有些则不是。例如,单例,尽管许多人认为这是一个很好的旧设计模式,但也有其他人不这么认为。

你可以检查问题单身有什么不好?为了更好地理解对它的不同意见。

这是制造混乱的常见方法。例如,god/厨房墨水类(做所有事情)。

反模式是人们倾向于以错误的方式编程的常见方式,或者至少是不太好的方式。