美文网首页程序员Android开发技术开发
不要为了使用设计模式而使用设计模式,这并不牛!

不要为了使用设计模式而使用设计模式,这并不牛!

作者: 岛上码农 | 来源:发表于2020-11-07 08:12 被阅读0次

前言:设计模式几乎是程序员必修的一门课程,而能够深入理解和运营设计模式更是程序员向架构师进阶的必备技能。但是,实际上,很多人对设计模式的理解仅仅停留在表面,甚至还因为代码中使用了设计模式而洋洋自得——而根本不管这是否必要!

理解GOF(Gang of Four,指撰写《设计模式》的四位作者)设计模式对于程序员而言是十分有价值的。当然,相对于理解,大部分设计模式的拥趸看起来仅仅是使用他们。甚至,在有些时候过度使用。

Java的Spring框架其中臭名昭著的一点是充斥着类似SimpleBeanFactoryAwareAspectInstanceFactory名称的类。至于其中命名是否简便性和设计模式是否正确运用这个由读者自己评判,但是就我本人而言,是十分讨厌看到这样的东西的。

设计模式可以拆分为四个大的类型:行为型、结构型、并行型和创建型。创建型,如同名称所示,是讲述如何编写创建各类对象实例的代码,例如工厂类。这是用于编写可复用、可测试和模块化代码的合集。大部分依赖注入(DI)和控制反转(IOC)框架是应用了创建型的设计模式。

然而,这给人造成了直接调用构造函数创建对象的方式是很Low的错误印象。例如,Emiko就发现了如下的Java代码:

    /**
     * Creates an empty {@link MessageCType}.
     * @return {@link MessageCType}
     */
    public static MessageCType createMessage() {
        MessageCType retVal = new MessageCType()
        return retVal;
    }

这仅仅是一个替换构造函数的方法,类似的代码就像成堆的垃圾一样在项目里随处可见。如果是他们把这个方法应用于流式编程中创建对象的话还情有可原。然而……他们并没有,实际上最终的调用代码是这样的:

    MessageCType msg = MessageCType.createMessage();
    msg.type = someMessageType;
    msg.body = …

由此,Emiko总结到:“在工作中,我们显然在为自己使用了高大上的设计模式而感到自豪!”

相关文章

  • 不要为了使用设计模式而使用设计模式,这并不牛!

    前言:设计模式几乎是程序员必修的一门课程,而能够深入理解和运营设计模式更是程序员向架构师进阶的必备技能。但是,实际...

  • 设计模式总结

    前言: 设计模式是用来解决复杂问题的,借助前人经验,把复杂问题变得简单,而不要生搬硬套,为了使用设计模式而使用设计...

  • web前端进阶之js设计模式篇——下

    设计模式是个抽象的东西,只是设计的指导思想,不要为了设计而设计,而是为了使用而设计 原型模式 概念 clone自己...

  • 对于23种设计模式的学习,需要掌握的是“道”,而不只是“术”

    设计模式是一门艺术,因为它们来源于生活,不要为了套用设计模式而去使用设计模式。我们在编写程序的时候用好设计模式可以...

  • 工厂设计模式

    声明:任何设计模式的初衷都是为了简化代码,不要为了使用某种模式生搬硬套,理解一种设计模式的思想,不要钻牛角尖 工厂...

  • 设计模式(一)——概述

    一、设计模式简介 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了...

  • 设计模式相关

    1、设计模式 设计模式是一套被反复使用,多数人知晓的,经过分类编目的、代码设计经验的总结。使用设计模式的目的是为了...

  • 设计模式(一)-工厂模式

    什么是设计模式? 设计模式是一套反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结.使用设计模式是为了可重...

  • 设计模式

    什么是设计模式 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重...

  • 设计模式简介

    设计模式(Design Pattern)是一套被反复使用、经过分类编目的、代码设计经验的总结。使用设计模式是为了可...

网友评论

    本文标题:不要为了使用设计模式而使用设计模式,这并不牛!

    本文链接:https://www.haomeiwen.com/subject/lflfbktx.html