我最近遇到了Wiki页面“ Anti-pattern” ,其中包含详尽的反模式列表。 其中一些对我来说很明显。 他们中的一些让我想了一下,其他的让我想了更多。 然后,我开始在页面上查找反模式“ singleton”,但找不到。 (文本搜索停止在单线态…)
单例是模式还是反模式?
别担心。 我不会谈论单例。 网上有足够多的讨论 。 现在让我仅以单例为例。 如果是单例,则图案和反图案之间没有清晰的界线。
作为一个例子,单例可以很容易地被使用,它很容易理解并且是一个很好的例子。 直到几年前,Singleton还是很受欢迎的,直到开始被认为是反模式。 有什么变化? 计算机科学家会变得更聪明,发现他们认为是一种好的模式实际上是反模式吗? 从一开始,单例就是一个反模式,我们只是不知道吗? 还是单身人士本身已经从成为好的设计模式变成了反模式?
我认为,答案很奇怪:这两种情况。 它与物理理论非常相似。 牛顿定理说,力与加速度和人体质量成正比。 爱因斯坦说这是不正确的,并且速度越大,误差越大。 牛顿错了吗? 是的,在某种意义上。 我们还能使用牛顿定律吗? 是的,我们可以,实际上是在低速情况下(与光速相比)。
从一开始单身人士就是坏人吗? 是的,和现在一样多。 我们还可以使用单例吗? 是的,我们可以,实际上,在低耗速的情况下我们可以做……在简单问题的情况下可以进行操作,而这些简单问题不需要将单例作为反模式的考虑。
反模式似乎与环境有关。 在这种情况下,环境比在物理情况下要复杂得多。 量子理论,相对论或不可逆热力学(我父亲是教授)很简单,因为它们不考虑人类。 他们只是关于这个问题。
编程是关于人的。
这是我们经常忘记的事情。 当一切开始的时候,都是关于位和字节,寄存器,存储器和十六进制代码的。 程序是否运行良好且执行不正常。 但是后来变得越来越复杂。 计算机科学成为信息技术。 越来越多的人使用IT,越来越多的人编写程序。 他们是程序员,他们为此而生。 即使是一个相对简单的项目,如果要商业化的话,也需要六到八个程序员。 它们也是“模式或反模式”依赖的环境的一部分。
环境还包含简单的事物,例如框架,编程语言,操作系统和其他技术细节,但它们单独或一起的复杂性都无法与人类媲美。
在就模式与反模式辩论做出决定时,许多人会问一个问题:模式可以用于什么? 这有什么用? 有什么好处? 这些是重要的问题。 如果没有好处:没有理由考虑这种模式。 但这并不能使其成为反模式。 如果没有好处,那么这种方法根本不是一种模式。 重要的问题是,它有什么弊端? 一般的Joe可以通过哪种方式来构建结构。 采用该模式的人射击自己的腿的可能性有多大? 这不是新事物。 博弈论还指出,这对于最小化最大损失比最大化可能的收益更为重要。
看一个模式,你能告诉我吗? 可能不是。 在某些情况下,是的。 恭喜,您找到了反模式。 在其他情况下,您找不到任何错误的用法。 这并不意味着没有。 时间会证明。 普通的乔会来,并将以您在最狂野的梦中无法想象的方式(或就此而言,夜马)使用这种模式。
因此,反模式并不是天生的坏事,就像枪支不会杀死人一样。 错误使用模式是不好的。 当人们倾向于以错误的方式使用模式时,则它是一种反模式。 单例就是这种情况。
类似的事情可以通过代码注释捕获。 当我开始学习Pascal编程时,我们的老师要求50%的代码必须有意义。 今天怎么样? 干净的代码说注释是邪恶的。 有点。 评论太多了。 有时我发现自己参与的项目完全被驱逐。 甚至不允许Javadoc。 奇怪的? 这只是他们应用干净代码模式的方式。
因此,这些天开始困扰我的问题是,在编程中使用设计模式是一种好模式还是本身就是一种反模式?
翻译自: https://www.javacodegeeks.com/2014/02/design-patterns-pattern-or-anti-pattern-that-is-the-question.html