Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >现在还需要学习设计模式吗?

现在还需要学习设计模式吗?

作者头像
oec2003
发布于 2021-11-04 02:14:08
发布于 2021-11-04 02:14:08
7650
举报
文章被收录于专栏:不止dotNET不止dotNET

最近面试了不少人,Java 和 dotNET 的都有,当问到设计模式时,大部分都只能说出单例和工厂,有些能聊聊其他的一些模式的,大多也没有在实际项目中用过。为了团队成员能有更好的编码能力,便有了重新写写设计模式的想法,写作也是一个重新学习的过程。

平时我们写代码,会有这样一些情况:

1、Leader 分配一个任务,比如要添加一个新功能,便找到相关的类,添加新的方法,然后就开始写业务逻辑,各种循环、判断,直到业务功能完成;

2、修复一个 Bug ,需要修改历史代码,某个方法被其他很多地方调用,怕改动引发出新的问题,有时复制一个相同方法进行修改;有时在方法参数中添加可空参数,然后根据参数值做判断。

上面的做法都是最直观、简单的方法,不需要动脑筋,一个程序员按照这种方法,工作一年便能轻松应对日常工作,工作十年,可以称之为拥有一年经验的熟练工,永远成不了高手。

如果一个团队都像这样做事,时间长了,会出现各种问题:

1、代码看着有很多类似的,但每个地方又有些差别,不敢随意修改;

2、Bug 修复异常困难,容易漏掉场景;

3、扩展功能会牵一发而动全身,需要加班加点,弄的疲惫不堪;

设计模式便是要打破我们的思维惯性,避免我们偷懒,强制我们思考的一个工具。

当再遇到上面提到的任务或 Bug 修复时,可以换一种方式来思考:

1、分析新增功能的边界和范围,和现有功能的关系;

2、结合现有功能和新增的部分,看是否需要提取接口、类是否需要拆分、方法是否需要合并、参数是否需要扩展;

3、整理出第一版设计后,就开始进行编码,过程中发现问题及时调整重构;

4、在不断优化过程中,会慢慢发现,最后的代码就符合某种模式了,所以说设计模式不是去生搬硬套,而是按照面向对象的设计原则逐步优化出来的。

现在所说的设计模式是基于面向对象语言,在面向对象语言中有很多的设计原则,在学习设计模式前需要了解并掌握这些设计原则,原则的灵活运用最终就体现成了各种模式,常用的原则有:

1、单一职责原则(SRP):一个类应该仅有一个引起它变化的原因;

2、开放封闭原则(OCP):类模块应该是可以扩展的,但是不可以修改(多扩展开放,对修改封闭);

3、Liskov 替换原则(LSP):子类必须能够替换他们的基类;

4、依赖倒置原则(DIP):高层模块不应该依赖于底层模块,二者都应该依赖于抽象;抽象不应该依赖于实现细节,实现细节应该依赖于抽象;

5、接口隔离原则(ISP):不应该强迫客户程序依赖于他们不用的方法;

6、迪米特法则(LOD):最小知识原则,类之间不该有直接关系的不要依赖,必须要有依赖关系的只依赖必要的抽象类或接口。

而到具体模式的学习就不得不提 GoF 23 种设计模式,这些设计模式在历史性的一本经典著作《设计模式:可复用面向对象软件的基础》中被描述的,这本书的四位作者并称为 Gang of Four(GoF) 。

现在市面上各种设计模式的书籍以及其他资料都是源于这 23 种,发展到今天模式已经远远不止 23 种,但我们只要学会了其根本就能够应对各种变化。

我们写代码时,引入任何的中间价、类库、权衡之下,肯定是利大于弊,我们才会使用,设计模式也是一样,如果只是盲目跟风,套用模式,会变成过度设计,得不偿失。初学者往往会犯这样的错误,觉得学习的模式得在项目中使用才行,找准时机就去套用。在学习过程中这样进行练习是可以的,但真实项目中,一定得去思考现在的方式有什么样的问题,为什么需要进行重构,然后才是思路和方法,得到最终的模式。

设计模式常常会按照创建型、结构型和行为型进行分类,其实很多模式并不常用、很多模式有很多的相似性。根据我自己的经验,我认为一个好的学习路径是:

1、先学习面向对象,然后掌握面向对象的设计原则;

2、学习常用的模式,多个模式可以对比起来学习;

3、搞懂模式能解决什么问题,和相似的模式应该怎么区分和选择;

4、结合实际的开发场景学习怎么应用;

5、阅读下 dotNET Core 源码,看看能不能发现使用了哪些设计模式。

后续的文章也大致会按照这个思路进行,不会按照常规的顺序、也不一定会每一个都介绍到,尽量做到最有价值的输出。

最后想说的是,程序员都应该学习设计模式,尤其是能养成一个使用设计思维的方式去处理问题更是一个程序员的必修课。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 不止dotNET 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深入浅出“设计模式”- 最易懂的设计模式解析
前言 最近在对项目进行重构,希望能利用设计模式使得自己的代码能更加简化 & 优雅一些,所以对设计模式进行了一系列的总结 今天我带你来了解一切关于设计模式的知识。 目录 1. 定义 某类特定问题的代码设
Carson.Ho
2019/02/22
4500
设计模式入门
  俗话说,好记性也不如烂笔头,最近开始阅读设计模式这方面的书籍,算是借此开个好头,把一些理解的和不太理解的都写下来。本人工作时间不长,经验、资历各方面也还比较欠缺,但目前来说还是很有决心多看一点好书,做好一些事情的。
happyJared
2018/09/20
3140
设计模式入门
回归设计模式的本质:设计原则
作为开发人员,或多或少都会熟悉或了解一些设计模式,如单例模式、工厂模式、观察者模式等等。但并非都能理解这些设计模式背后的本质,从而可能会导致对模式单纯的套用或滥用的情况出现。不要为了模式而模式,要明白使用模式的目的,要正确理解模式背后的设计原理,要理解背后的基本设计原则。
Keegan小钢
2019/07/30
5160
回归设计模式的本质:设计原则
设计模式专题(一)——面向对象的设计原则
设计模式专题(一)——面向对象的设计原则 (原创内容,转载请注明来源,谢谢) 设计模式在程序中,主要服务于设计类、接口等,是以面向对象为基础的,因此面向对象的设计原则是各设计模式中都会考虑与体现的。本篇内容主要从全局角度讲述设计模式的原则,具体每种设计模式的实现,将在后续的文章中逐个写明。 面向对象的设计共有五大原则。 一、单一职责(SRP) 1、含义 单一职责主要满足两点内容:相同的职责避免分散到多个类中;一个类中避免承担太多的职责。 2、最明显体现单一职责的设计模式主要是工厂模式和命令模式。 3、
用户1327360
2018/03/07
1.3K0
设计模式概述
设计模式四人组GoF(“四人帮”,又称Gang of Four,即Erich Gamma, Richard Helm, Ralph Johnson & John Vlissides四人)的《设计模式》,原名《Design Patterns: Elements of Reusable Object-Oriented Software》(1995年出版,出版社:Addison Wesly Longman.Inc),第一次将设计模式提升到理论高度,并将之规范化。该书提出了23种基本设计模式。时至今日,在可复用面向对象软件的发展过程中,新的设计模式仍然不断出现。
beginor
2020/08/10
4410
设计模式概述
设计模式——代码如若初相见
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
100000860378
2018/09/13
4690
深入解析设计模式与设计原则:构建可维护性和可扩展性代码
设计模式大概有23种。 设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。 从定义可以看出,设计模式的使用有很多的局限性。一定要明确它解决什么问题,再使用它。当不清楚设计模式解决什么问题时不要轻易使用。
Lion 莱恩呀
2024/10/14
1850
深入解析设计模式与设计原则:构建可维护性和可扩展性代码
【游戏开发】浅谈游戏开发中常见的设计原则
  俗话说得好:“设计模式,常读常新~”。的确,每读一遍设计模式都会有些新的体会和收获。马三不才,才读了两遍设计模式(还有一遍是在学校学的),属于菜鸟级别的。这次准备把阅读设计模式的想法记录下来,并且把设计模式应用在Unity游戏开发上,做些小案例。
马三小伙儿
2018/09/12
1.7K0
Java设计模式之GoF设计模式概述
最近要开始学习设计模式了,以前是偶尔会看看设计模式的书或是在网上翻到了某种设计模式,就顺便看看,也没有仔细的学习过。前段时间看完了JVM的知识,然后就想着JVM那么费劲的东西都看完了,说明自己学习耐力还是有的,所以就打算仔细的研究研究设计模式,然后也将设计模式的学习过程记录下来。
纪莫
2018/08/01
5110
JavaScript设计模式经典-面向对象中六大原则
主要学习JavaScript中的六大原则。那么六大原则还记得是什么了吗?六大原则指:单一职责原则(SRP),开放封闭原则(OCP),里氏替换原则(LSP),依赖倒置原则(DIP),接口分离原则(ISP),最少知识原则(LKP)。
达达前端
2019/11/21
8350
JavaScript设计模式经典-面向对象中六大原则
【设计模式】六大设计原则
设计模式是系统服务设计中针对常见场景的一种解决方案,可以解决功能逻辑开发中遇到的共性问题。
Li_XiaoJin
2022/06/10
3980
[C++设计模式] 为什么需要设计模式?
设计模式(Design Pattern)是对软件开发过程中反复出现的设计问题所提供的通用解决方案。它不是代码,而是经过验证的“最佳实践”,以一种结构化的方式记录了解决问题的思想。
DevKevin
2024/12/04
1590
[C++设计模式] 为什么需要设计模式?
软件设计的原则
了解设计模式的朋友们,想必都听说过“六大设计原则”吧。其实最经典的 23 种设计模式中或多或少地都在使用这些设计原则,也就是说,设计模式是站在设计原则的基础之上的。所以在学习设计模式之前,很有必要对这些设计原则先做一下了解。
用户7657330
2020/08/14
6800
设计模式——设计模式简介、分类及面向对象设计原则
“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。
Gnep@97
2023/08/10
3130
设计模式——设计模式简介、分类及面向对象设计原则
01 面向对象、设计模式有何关系?
在这个例子中,我们创建了一个 Car 类,该类有 brand、model 和 speed 属性,以及 accelerate 和 brake 方法。每个汽车对象都是 Car 类的一个实例。
用户6256742
2024/05/31
1620
01 面向对象、设计模式有何关系?
"设计模式我学过呀,就是没用过"
在开发中,不使用设计模式也不是不可以,但是用好设计模式能帮忙我们更好的去解决实际问题。
田维常
2021/04/22
3470
"设计模式我学过呀,就是没用过"
软件开发设计原则
下文摘自http://www.csdn.net/article/2015-09-06/2825621 GoF(四人帮),传说中的四位大神们,他们联手搞出了一套设计模式,堪称 OOD(面向对象设计)的经典之作!震惊了整个软件开发领域。但这四个老家伙非常怪异,总是喜欢显摆一些高深的理论,甚至有时候不说人话,十分让人费解。 除了最经典的六大设计原则以外,还有一些其他的设计原则也非常重要。我将尽可能地解释这些晦涩的理论,希望看完之后,会让您对这些设计原则稍微加深一些理解。若有不正确的地方,恳请大家指正! 六
张善友
2018/01/29
2K0
【设计模式】Java 语言不同的编程范式-第1章
1)设计模式(design pattern)是前辈的经验积累,是软件开发人员解决软件开发过程中的一般问题的通用方案,能够帮助开发人员提高代码的可重用性,增强系统的可维护性,快速地解决开发过程中常见的诸多难题。
跟着飞哥学编程
2022/12/02
5570
工作两年后,我如何看待设计模式
在软件工程中,设计模式是经过反复验证的最佳实践,用于解决在软件设计中经常遇到的一类问题。它们为开发者提供了一种通用的解决方案和语言,使得复杂的编程问题得以简化,代码结构更加清晰,可维护性大大提高。简而言之,设计模式在应用程序中可以被统称为"套路"。
闫同学
2024/06/17
2400
[C++设计模式] 深入理解面向对象设计原则
在软件开发中,变化是永恒的主题。当需求发生变化时,设计的灵活性和可扩展性便成为系统能否持续演进的关键。设计模式的核心就在于利用面向对象设计原则,帮助开发者构建既能应对变化又具有高度复用性的系统。
DevKevin
2024/12/04
1890
相关推荐
深入浅出“设计模式”- 最易懂的设计模式解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档