设计模式:模式或反模式,这就是问题

我最近遇到了Wiki页面“ Anti-pattern” ,其中包含详尽的反模式列表。 其中一些对我来说很明显。 他们中的一些让我想了一下,其他的让我想了更多。 然后,我开始在页面上查找反模式“ singleton”,但找不到。 (文本搜索停止在单线态…)

单例是模式还是反模式?

别担心。 我不会谈论单例。 网上有足够多的讨论 。 现在让我仅以单例为例。 如果是单例,则图案和反图案之间没有清晰的界线。

作为一个例子,单例可以很容易地被使用,它很容易理解并且是一个很好的例子。 直到几年前,Singleton还是很受欢迎的,直到开始被认为是反模式。 有什么变化? 计算机科学家会变得更聪明,发现他们认为是一种好的模式实际上是反模式吗? 从一开始,单例就是一个反模式,我们只是不知道吗? 还是单身人士本身已经从成为好的设计模式变成了反模式?

我认为,答案很奇怪:这两种情况。 它与物理理论非常相似。 牛顿定理说,力与加速度和人体质量成正比。 爱因斯坦说这是不正确的,并且速度越大,误差越大。 牛顿错了吗? 是的,在某种意义上。 我们还能使用牛顿定律吗? 是的,我们可以,实际上是在低速情况下(与光速相比)。

从一开始单身人士就是坏人吗? 是的,和现在一样多。 我们还可以使用单例吗? 是的,我们可以,实际上,在低耗速的情况下我们可以做……在简单问题的情况下可以进行操作,而这些简单问题不需要将单例作为反模式的考虑。

反模式似乎与环境有关。 在这种情况下,环境比在物理情况下要复杂得多。 量子理论,相对论或不可逆热力学(我父亲是教授)很简单,因为它们不考虑人类。 他们只是关于这个问题。

编程是关于人的。

这是我们经常忘记的事情。 当一切开始的时候,都是关于位和字节,寄存器,存储器和十六进制代码的。 程序是否运行良好且执行不正常。 但是后来变得越来越复杂。 计算机科学成为信息技术。 越来越多的人使用IT,越来越多的人编写程序。 他们是程序员,他们为此而生。 即使是一个相对简单的项目,如果要商业化的话,也需要六到八个程序员。 它们也是“模式或反模式”依赖的环境的一部分。

环境还包含简单的事物,例如框架,编程语言,操作系统和其他技术细节,但它们单独或一起的复杂性都无法与人类媲美。

反设计模式

在就模式与反模式辩论做出决定时,许多人会问一个问题:模式可以用于什么? 这有什么用? 有什么好处? 这些是重要的问题。 如果没有好处:没有理由考虑这种模式。 但这并不能使其成为反模式。 如果没有好处,那么这种方法根本不是一种模式。 重要的问题是,它有什么弊端? 一般的Joe可以通过哪种方式来构建结构。 采用该模式的人射击自己的腿的可能性有多大? 这不是新事物。 博弈论还指出,这对于最小化最大损失比最大化可能的收益更为重要。

看一个模式,你能告诉我吗? 可能不是。 在某些情况下,是的。 恭喜,您找到了反模式。 在其他情况下,您找不到任何错误的用法。 这并不意味着没有。 时间会证明。 普通的乔会来,并将以您在最狂野的梦中无法想象的方式(或就此而言,夜马)使用这种模式。

因此,反模式并不是天生的坏事,就像枪支不会杀死人一样。 错误使用模式是不好的。 当人们倾向于以错误的方式使用模式时,则它是一种反模式。 单例就是这种情况。

类似的事情可以通过代码注释捕获。 当我开始学习Pascal编程时,我们的老师要求50%的代码必须有意义。 今天怎么样? 干净的代码说注释是邪恶的。 有点。 评论太多了。 有时我发现自己参与的项目完全被驱逐。 甚至不允许Javadoc。 奇怪的? 这只是他们应用干净代码模式的方式。

因此,这些天开始困扰我的问题是,在编程中使用设计模式是一种好模式还是本身就是一种反模式?

参考:“ 设计模式:模式或反模式”,这是 Java Deep博客上我们JCG合作伙伴 Peter Verhas 提出的问题 。

翻译自: https://www.javacodegeeks.com/2014/02/design-patterns-pattern-or-anti-pattern-that-is-the-question.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis的散列类型

Redis是采用字典结构以key-value的形式存储数据的,在散列类型(所谓的hash)中的value也是一种字典结构。如果用关系表结构去理解,就是key为对象,value是属性和属性值。如下图: 所以使用散列(hash…

python configparser 注释_使用configpar添加注释

如果您想去掉尾随的,可以按照atomopter的建议将ConfigParser.ConfigParser子类化,并实现自己的write方法来替换原来的方法:import sysimport ConfigParserclass ConfigParserWithComments(ConfigParser.ConfigParser):def add_comment(self, …

easy html css tree 简单的HTML css导航树

code: show: 更多专业前端知识,请上 【猿2048】www.mk2048.com

使用Maven和WebLogic 12c开发Java EE应用程序

WebLogic Server 12c现在对Maven提供了很好的支持。 不过,此文档有点被隐藏,因此这里是直接链接http://docs.oracle.com/middleware/1212/core/MAVEN 总而言之,Oracle没有为其服务器工件提供公共的Maven存储库管理器托管。 但是,…

Java实现并发线程中线程范围内共享数据

---恢复内容开始--- 利用Map,HashMap键值对的数据结构,实现并发线程中线程范围内数据共享。 package cn.qy.heima2;import java.util.HashMap; import java.util.Map; import java.util.Random;public class ThreadScopeShareData {private static int …

Aspose 插件

百度:Aspose Aspose.Cells.dll Aspose.Slides.dll Aspose.Words.dll 转载于:https://www.cnblogs.com/Tpf386/p/10001814.html

mysql数据库version版本控制_MySQL数据库版本控制

你用什么方法来控制你的数据库?我已经将所有数据库表作为单独的.sql脚本提交到我们的respository(mercurial)。这样,如果团队中的任何成员对employee表进行了更改,比如说,当我更新我的存储库时,我会立即知道哪个表被修…

js生成二维码

1.引入js文件 https://blog-static.cnblogs.com/files/cengjingdeshuige/jquery.qrcode.js https://blog-static.cnblogs.com/files/cengjingdeshuige/qrcode.js 2.页面加入元素 <div id"qrcodeCanvas"></div>3.js里面生成二维码$(#qrcodeCanvas).qrc…

Java 8将默认使用传输级别安全性(TLS)1.2

传输级别安全性&#xff08;TLS&#xff09;1.2将默认设置为3月18日发布的标准Java的下一版本。TLS将提供加密的Internet通信&#xff0c;但不能完全解决Java的安全问题&#xff0c;因为Java的加密通信没有灵丹妙药有关安全问题的解释。 TLS版本1.2将在Java开发工具包&#xf…

18.11.16-高等数学-曲率计算

11.16 转载于:https://www.cnblogs.com/coder211/p/10005502.html

springboot干什么的_Spring Boot 项目的这些文件都是干啥用的?

上一讲我们用官网包或者 IDE 工具&#xff0c;快速构建了 Spring Boot 应用&#xff0c;并且看到了第一个程序的运行结果&#xff1a;Hello World&#xff01;本文我们了解下 Spring Boot 的目录结构&#xff0c;了解一个事物&#xff0c;清楚了它的结构&#xff0c;明白了内部…

微信小程序开发——点击按钮退出小程序的实现

微信小程序官方是没有提供退出的API的&#xff0c;但是在navigator这个组件中&#xff0c;是有退出这个功能的&#xff1a; 详情参考官方文档&#xff1a;navigator。 示例代码&#xff1a; 1 <navigator open-type"exit" target"miniProgram">关闭小…

使用RequestHandlerRetryAdvice重试Web服务操作

1.引言 有时在调用Web服务时&#xff0c;我们可能有兴趣在发生错误的情况下重试该操作。 使用Spring Integration时&#xff0c;我们可以使用RequestHandlerRetryAdvice类实现此功能。 此类将使我们在放弃并引发异常之前重试指定次数的操作。 这篇文章将向您展示如何完成此任务…

ASP.NET MVC如何做一个简单的非法登录拦截

摘要&#xff1a;做网站的时候&#xff0c;经常碰到这种问题&#xff0c;一个没登录的用户&#xff0c;却可以通过localhost:23244/Main/Index的方式进入到网站的内部&#xff0c;查看网站的信息。我们知道&#xff0c;这是极不安全的&#xff0c;那么如何对这样的操作进行拦截…

无法创建java虚拟机_创建java虚拟机失败的解决方法

创建java虚拟机失败的解决方法解决问题的步骤&#xff1a;1、从eclipse文件夹中打开eclipse.ini文件2、修改–launcher.XXMaxPermSize属性3、将值改为512m即可配置文件格式&#xff1a;-startupplugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar--launcher.libra…

Java简述

Java的特点&#xff08;11个关键术语&#xff09;from《Java核心技术I》 1) 简单性 2) 面向对象 3) 分布式 Java有一个丰富的例程库&#xff0c;用于处理像HTTP和FTP之类的TCP/IP协议。Java应用程序能够通过URL打开和访问网络上的对象&#xff0c;其便捷程度就好像访问本地文…

java 泛型嵌套泛型_Java泛型嵌套

package com.study.generics;//泛型的嵌套使用public class GenericsDemo06 {public static void main(String []args) {GenericsComputer computer new GenericsComputer("联想笔记本电脑","联想");GenericsPeople people new GenericsPeople(computer)…

zipkin 服务追踪

服务追踪,就是对请求接口的追踪并保存. 在测试的过程中我们会发现&#xff0c;有时候&#xff0c;程序刚刚启动后&#xff0c;刷新几次&#xff0c;并不能看到任何数据&#xff0c;原因就是我们的spring-cloud-sleuth收集信息是有一定的比率的&#xff0c;默认的采样率是0.1&am…

Drools:基于PHREAK堆栈的评估和向后链接

前一段时间&#xff0c;我写了一篇有关我们新算法的博客&#xff1a; http : //blog.athico.com/2013/11/rip-rete-time-to-get-phreaky.html 有人问我有关新的基于堆栈的系统以及向后链接如何工作的信息。 我在电子邮件中回复了他们&#xff0c;但我认为其他人可能会发现它很…

人月神话阅读笔记02

作者在《人月神话》中对于大型项目总是陷入焦油坑的原因给出了一些令人叹服的解释&#xff0c;其中广为流传的就是“人月神话”。事实上&#xff0c;它的意思是&#xff1a;人月是一个神话——通俗地讲&#xff0c;人月&#xff0c;即工作人员和时间可以替换&#xff0c;二者是…