设计模式:Mogwai或Gremlins?

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提供了接口 (这有助于原始设计模式书中介绍的许多设计模式),而诸如ScalaGroovy之类的较新语言则添加了自己的模式实现。

设计模式的使用: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值