1994年出版的《 设计模式:可重用的面向对象软件的元素》向许多软件开发人员介绍了“针对常见设计问题的简单明了的解决方案目录”的概念,如今几乎每个面向对象的软件开发人员都将其称为“ 设计模式”。 。” 像大多数技术概念(无论是真实的还是炒作的还是介于两者之间的)一样,“设计模式”似乎经历了接受的正常阶段,从新思想Swift发展为普遍的思维方式。 与往常一样,由于设计模式被过度使用,滥用和使用不当 ,流行度的Swift上升导致了强烈反对。 如今,正确使用设计模式似乎已被视为一种有用的工具,但通常认为使用不当会导致危险。

我通常避免在整个博客文章中都讨论设计模式的优缺点,但是最近一位软件开发人员做出了一个类比,涉及他对设计模式的使用和滥用的观察。这激励了我写这篇文章。 安迪指出,一些软件开发人员似乎倾向于采用一种无害且意图明确的设计模式并将其转变为邪恶 ,就像将像Gizmo这样的Mogwai转变为Gremlin一样 。 在本文中,我将详细探讨为什么这是一个特别适合电影主题的类比,用于将有效使用设计模式转变为滥用和滥用设计模式。

1984年的电影Gremlins始于唐人街的一位发明家和父亲,购买了Mogwai。 商店所有者Wing先生不愿意将Mogwai卖给发明人/父亲,因为“ Mogwai承担了很多责任”。 然而,荣先生的孙子偷偷地将莫格威人卖给了发明人/父亲,同时警告他要注意的三点重要事项,即与莫格威人的照料有关。 这三件事是:

  1. '让他远离光明。 他讨厌明亮的光线,尤其是阳光。 它会杀了他。
  2. '让他远离水。 不要弄湿他。
  3. “但是最重要的规则,无论他哭多少,也从来没有乞求,你永远都不会忘记的规则,永远不要在午夜之后喂饱他。”

设计模式的适当使用不受午夜后的明亮光线,水或进食的影响,但是应用设计模式时不小心的后果可能与不正确照顾Mogwai相似。

快速产生设计模式

当Mogwai或Gremlins变湿时,更多Mogwai或Gremlins会自发繁殖。 对于具有设计模式的开发人员来说,效果可能非常相似。 对于刚接触设计模式的开发人员(或者对自己最近学习的新设计模式感到兴奋的开发人员),将太多的设计模式应用于相同的问题很容易。 如果设计模式很好,那么更多的设计模式必须更好。 同样,对于开发人员来说,很容易陷入将相同的设计模式应用于太多不同,不同且无关的问题的陷阱( Maslow's Hammer )。

设计模式变得邪恶

如果Mogwai在午夜之后进食,就会变成顽皮的Gremlins。 同样,如果使用不当,设计模式可能弊大于利。 错误使用的设计模式可能会混淆代码的意图。 几种设计模式一起使用也可以掩盖意图。 如果不谨慎使用,旨在促进更好设计的设计模式通常会导致设计变差。 一种情况下的设计模式可能是另一种情况下的反模式。

将常见设计原则分类为模式的好处之一是能够帮助开发人员和设计人员之间进行交流。 但是,当错误使用或过度使用设计模式时,可能会产生完全相反的效果(妨碍理解和沟通)。 我也看到过这样的情况,当开发人员坚持使用某种特定的设计模式时,他或她实际上使用的是完全不同的设计模式甚至是反模式。 在这种情况下,使用“设计模式”术语也会造成混淆,而不是加以澄清。

善意却构想

这些问题最常见于开发人员应用设计模式时,因为他们认为应该这样做,而不是因为他们真正了解特定情况下的价值。 开发人员不仅需要了解不同设计模式的优势和目标,还需要了解与之相关的权衡取舍,而不是将相同的设计模式应用于每个问题,或将设计模式塞入不合适的情况。设计模式,以便就设计模式的应用做出明智的决定。

有效利用设计模式

在我看来,设计模式的最佳使用是当开发人员根据观察到需求的经验自然地应用它们而不是强迫使用它们时发生的。 毕竟,当“ 四人帮”编写有关设计模式的书时,他们正在对开发人员已经在使用的现有设计模式进行分类。 确实,他们书中涵盖的某些模式变得如此流行,以至于它们被合并到Java语言语法和其他更新的语言中。 例如,Java提供了接口 (这有助于原始设计模式书中介绍的许多设计模式),而诸如Scala和Groovy之类的较新语言则添加了自己的模式实现。

设计模式的使用:Gizmo或Gremlin?

如果使用得当,设计模式将具有吸引力并令人期待,就像Mozwai的Gizmo是理想的宠物一样。 但是,如果使用不当或在没有适当注意和考虑的情况下应用设计模式,则可能会变成Gremlins,严重破坏代码基础,并妨碍理解和维护设计的能力。 请注意,设计模式本身并不一定是问题,而是由正确使用设计模式的人来决定它们是否保持理想的状态(例如Gizmo)或不良状态(例如Gremlins)。

参考: 设计模式:Mogwai或Gremlins? 由我们的JCG合作伙伴 Dustin Marx在Inspired by Actual Events博客中获得。

翻译自: https://www.javacodegeeks.com/2012/11/design-patterns-mogwai-or-gremlins.html

设计模式:Mogwai或Gremlins?相关推荐

  1. WEB端Monkey测试gremlins.js

    一直想做web端UI自动化测试,网上查阅了 大量的资料,发现有一个线程的monkey测试工具,地址:https://github.com/marmelab/gremlins.js.但是我对js不是很精 ...

  2. 【Design pattern】设计模式思路总结(一)

    看了一周的设计模式,跟着小菜的思路走! 从简单工厂过渡策略,后面看的这几个模式都是在单一职责,开放--封闭原则,依赖倒转原则下不断的改进,采用模式写出的代码更容易扩展,维护! 比较容易懂. 装饰模式: ...

  3. GOF23设计模式(结构型模式)代理模式~

    代理模式应用场景十分广泛,随便一个框架都会用到,因此学好代理模式对后续框架学习是最基本的要素!!今天我们就来讲讲代理模式! 目录 1.简介 1. 核心作用 2. 角色分析 2. 应用场景 4. 分类 ...

  4. GOF23设计模式(创建型模式)工厂模式

    目录: 一:工厂模式的核心本质 二:关于面向对象的六大基本原则 三:工厂模式的三大类详解(代码示例,详细分析) 首先,上咱本GOF23所有工厂模式的分类表格!!! 创建型模式 单例模式.工厂模式.抽象 ...

  5. GOF23设计模式(创建型模式)单例模式

    目录: 一:单例模式的核心作用.常见应用场景 二:五种单例模式及其实现 三:关于反射和反序列化破解单例模式的漏洞,以及相应的解决方案 四:测试五种单例模式的效率 一:核心作用及常见应用场景: 核心作用 ...

  6. Python七大原则,24种设计模式

    七大设计原则: 1.单一职责原则[SINGLE RESPONSIBILITY PRINCIPLE]:一个类负责一项职责.  2.里氏替换原则[LISKOV SUBSTITUTION PRINCIPLE ...

  7. Java设计模式:单例模式

    学而时习,稳固而之心, 好久没有复习java的知识了,今天有空温习了单例模式,这里记录一下 单例模式是常见的设计模式的一种,其特点就是 指一个类只有一个实例,且该类能自行创建这个实例  , 保证一个类 ...

  8. 设计模式中的六大基本原则

    软件设计中的基本共识: 1,高内聚,低耦合:如果想使软件系统架构稳定,那么我们期望软件的各模块内元素结合的紧密,而模块之间的耦合度(关联性)越低越好.高内聚不仅体现在模块上,单独的类或方法也应该是内聚 ...

  9. JS中的7种设计模式

    第九章Refactoring to OOP Patterns 重构为OOP模式 7种设计模式: 1,模版方法模式(template method) 2,策略模式(strategy) 3,状态模式(st ...

最新文章

  1. JS window对象的top、parent、opener含义介绍 以及防止网页被嵌入框架的代码
  2. 关于JS的循环和函数,由入门到放弃
  3. 立足前沿 直击热点 搭建平台,2018中国人工智能大会在深圳拉开帷幕
  4. 时间复杂度和空间复杂度的故事
  5. python2异步编程_python异步编程入门
  6. Css 选择器 算法 规则
  7. uni-app,v-for时 block 和 view 的使用
  8. Wicket实战(二)hello world
  9. python怎样安装wordcloud(词云)文件
  10. nodejs 密码加盐
  11. Mac 升级 catalina 后无法创建文件,Read-only file system
  12. 多个完整设计的单片机、8086、STM32制作教程和资料-转发分享
  13. web嵌入flowplayer流媒体播放器
  14. 相册里的WEB3 Festivals香港记忆
  15. python批处理原始核磁数据用于DPABI
  16. GWL30地下水情监测仪应用全自动水情信息实时监测
  17. TeraTerm Language 帮助文档1-[如何运行]
  18. kitti rotation,label等细节相关
  19. 关于“部分便笺的元数据已被损坏,已将其恢复为默认值”的处理办法研究
  20. 51单片机DS1302数字时钟

热门文章

  1. 【第二弹】经典移植至IOS端、经典合集
  2. 西北大学21年计算机考研情况 信科院专硕初试考数一英一分数线265分
  3. NV 英伟达2022数字芯片笔试题
  4. 【重温基础算法】内部排序之快速排序法
  5. Ubuntu下安装配置TAU分析mpich和openmp程序性能
  6. jeecgboot关闭swagger
  7. 很多网站、APP 前段时间一下都变灰了。 先来感受一下变灰后的效果。
  8. 雷电模拟器python编程接口_python:编写登陆接口(day 1)
  9. 2022年的五个大数据发展趋势
  10. 【数据库】Apache Doris : 一个开源 MPP 数据库的架构与实践