2W 行 | 深入理解「设计模式」

news/2024/5/6 1:24:01/文章来源:https://blog.csdn.net/biyusr/article/details/126982926

你好,我是悟空。

如何将设计模式运用到项目中?如何理解设计模式的妙用?如何提高代码质量?如何做好重构?

这些问题值得我们每个软件工程师去深入思考和总结。

今天推荐一本书:《设计模式之美》,这本书我看过,内容非常丰富,从点到面,一步一步深入讲解,新手也能快速掌握~ 本书2w行代码、200个实战项目,助你修炼5大编程基本功。

回馈粉丝,文末送书!

所谓练武不练功,到老一场空,以技术为驱动的程序员同样如此。面向对象编程范式、设计原则、代码规范、重构技巧和设计模式这些程序员基本功在根本上决定了这个职业的发展高度。把这些基本功练好,可以让你成为一个合格且优秀的程序员、摆脱“码农”身份成为真正的技术专家。

今天推荐一本前谷歌工程师王争重磅新书《设计模式之美》,这本书来源于极客时间高口碑专栏,那么这本书所讲的基本功到底是什么?是如何影响程序员的,又该如何修炼以帮助我们在程序员这条赛道上跑得更快、获得更高回报。我们一起来了解吧。

▲ 点击图片,开始你的程序员基本功修炼之路

决定程序员发展的5个基本功

小异了解到不少程序员在学习和实际编程过程中看重技巧类的东西,而忽视基本功,到头来发现自己的代码结构混乱、难以维护、拖累整个项目,源码看得似懂非懂。整体情况非常糟糕,这一切都限制着自己的职业发展。

想要改善这些情况,写出一手高质量的代码,获得更为优渥的回报,需要从以下5个基本功方面入手,认认真真,潜心锻炼。

面向对象编程

面向对象编程(Object Oriented Programming,OOP)是一个主流的编程范式,包含封装、抽象、继承和多态四大特性。按照小争哥在书中的非严格限定下的定义,可以这样说:

面向对象编程就是一种将对象或类作为代码组织的基本单元来进行编程的编程范式或编程风格。

学习和使用这种编程风格,主要是因为它有着非常丰富的特性,能够解决系统的可维护性、可扩展性等问题。并且可以用来实现更多复杂的设计思路,从而成为许多设计原则、设计模式编码实现的基础。

相对于其他的编程风格,面向对象编程的代码更符合人们观察和解决问题的思维方式,从逻辑上让代码的可读性变强——更容易被人理解,也就更容易扩展和维护。在很多情况下,评判代码质量好坏的标准,就有可读性与可维护性,所以学会和掌握面向对象编程这个基本功,可以初步解决这两个方面的问题,从而写出高质量的代码。

设计原则

所谓的设计原则就是许多先驱们在做代码设计时总结的一些宝贵经验,相比单纯看它们的定义,知道它们的应用场景和能够解决什么问题更重要。

因为开发的时候会面对各种各样不同的需求,如果我们不了解设计原则,对于每次的项目需求都毫无准备,那么在前期的代码设计工作上将要花费大量的时间与精力,得不偿失。有了世界上无数大师们的经验总结,我们就可以通过分析需求从而选择合适的设计原则,大大减少初期开发成本

小争哥在他的书中主要讲了6大类9个设计原则,分别是:1)单一职责原则(SRP);2)开闭原则(OCP);3)里氏替换原则(LSP);4)接口隔离原则(ISP);5)依赖反转原则(DIP);6)KISS 原则、YAGNI 原则、DRY 原则和 LoD 法则。

通过认识和了解这些设计原则,我们能够清楚地知道为什么使用这种设计模式,并且知道何时如何恰当地使用设计模式——基本功之间也是相互关联的。

设计模式

设计模式同样也是程序员基本功,是为了解决代码的解耦、可扩展性问题:它是指针对软件开发中经常遇到的一些设计问题而总结的一套解决方案和设计思路。这些设计模式随着编程语言的发展与演变,在不同时代有着不同的表现。

而当下比较常用的设计模式并不多,小争哥在他的书里介绍了22种设计模式,主要分为创建型结构型行为型三个大类。学习设计模式同样需要关注它们的典型应用场景与能够解决的问题,还需要注意不能过度使用!

这些设计模式代表了最佳的实践,是无数开发人员经过漫长的时间试验和错误总结出来的。作为新手学习设计模式有助于他们通过这种快捷简单的方式来学习软件设计,作为有编程经验的程序员学习设计模式则能够帮助他们在开发过程中更快选择最佳解决方案。

代码规范

当初期工作做好,开始写代码的时候,就需要注重代码规范这一基本功了。相比设计原则与设计模式,代码规范更为简洁与直接,注重的是代码细节。它是为了解决代码的可读性问题,让代码的维护变得可行并且更简单。

小争哥在书中总结了包括变量函数的命名规范代码注释规范等17条能够有效改善代码质量的代码规范。一般来说我们并不需对这些规范有太多的思考,只要遵循这些规范即可让自己的代码可读性提升一个很大的档次。

同时他还在书中介绍了一些代码的“坏味道”,帮助我们认识和了解什么代码是不规范的,如何避免与优化,从正反两面同时入手提高代码质量。

重构技巧

只要项目还在运转,重构就是不可避免的。重构技巧作为程序员的基本功,在软件开发中是不可或缺的能力,它能够保证项目代码质量稳定,让代码不至于变得“腐朽”而拖垮整个项目。

如前文所说,这些程序员基本功都是相互联系的,也就是说面向对象编程、设计原则、设计模式、代码规范都是重构的工具。设计原则与设计模式很大的一个应用场景就是重构;重构分为大重构(大规模,高层次)和小重构(小规模,低层次),代码规范就是小重构的主要依赖。

无论使用何种方式去重构代码,需要谨记的是重构的目的——让代码质量提升,不应该过度使用代码设计,“为了设计而设计”,导致代码的复杂度过高,从而降低代码质量。

碍于篇幅,小异只是简单介绍了这5个程序员的基本功表现与功效,及其之间的相互关系。想要写出高质量的代码,除了积累这些理论知识之外,实践是必不可少的过程,只有经过了实践才能把理论落实,遇到问题的时候可以快速定位知识点从而思考出思考出解决方法。

活动方式:

为了感谢一路支持悟空的小伙伴,今天特地给大家送一点小福利。

规则非常简单,文末留言,按点赞数排名,排名第1、2、3、4名者各获得一本。(可以发朋友圈集赞或发微信群集赞,若发现有人用机器刷赞,立即取消资格并拉黑)

另外 1 本我会直接送给读者群里的卷王朋友。

活动结束时间:2022.08.28 晚上8点整

中奖后请及时联系我,可以先加我好友~

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

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

相关文章

【附源码】从0到1项目搭建-框架搭建(上)

前言 大家好,本文是基于 SpringBoot 从0搭建一个企业级开发项目,基于SpringBoot 的项目,并集成MyBatis-Plus、Druid、Logback 等主流技术。希望对大家有所帮助~ 目录前言一、概述二、创建统一的依赖管理2.1、统一的依赖管理工程创建2.2、Mave…

Java深入数组

Java深入数组 1、数组概念 数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致。 2、数组的初始化 Java语言中数组必须先初始化才能使用,所谓初始化就是为数组的数组元素分配内存空间,并为每个数组元素赋初始值。一旦数组的初…

ELK优雅开启密码登录认证

ELK登录认证 当我们安装好ELK后,默认是可以直接访问到kibana的,可以直接查看收集到的信息,这样很不安全。 很多人采用的是Nginx代理来做登录验证功能,这也是一种实现方式,但是我们还有另一种更加优雅的方式&#xff0c…

Vue2.0 —— Vue.nextTick(this.$nextTick)源码探秘

Vue2.0 —— Vue.nextTick(this.$nextTick)源码探秘 《工欲善其事,必先利其器》 一、知识储备 在学习这个 API 之前,我们需要进行一定量的知识储备,并且是从最基础的开始: nextTick,译为&…

激光雷达物体检测(二):点视图检测算法

综述: 1.点视图: PointNet/PointNet,Point-RCNN,3D SSD 2.俯视图: VoxelNet,SECOND,PIXOR,AFDet 3.前视图: LaserNet,RangeDet 4.多视图融合: 俯视图…

谷粒商城 高级篇 (十九) --------- 消息队列

目录一、概述二、应用三、RabbitMQ 概念四、安装 RabbitMQ五、RabbitMQ 运行机制Exchange 类型六、RabbitMQ 整合七、RabbitMQ 消息确认机制1. ConfirmCallback2. ReturnCallback3. Ack 消息确认机制一、概述 大多应用中,可通过消息服务中间件来提升系统异步通信、…

python实现图像添加噪声、噪声处理、滤波器代码实现

目录 加载图像添加噪声 图像傅里叶变换和反变换并可视化 图像处理---高通滤波、低通滤波、带通滤波 低通滤波器---Butterworth低通滤波器、理想低通滤波器、高斯低通滤波器 加载图像添加噪声 高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)…

Linux设置开机自启动Java程序--三种方式

Linux设置开机自启动Java脚本程序 缘起 公司内部的服务器中有个SpringCloud项目需要运行,之前都是通过nohup java-jar .. &的命令来执行的,但是这个cloud项目服务太多,手动启动太麻烦而且容易出错,干脆写个执行java的脚本好…

C++内存管理(每日更新)

文章目录0 概述0.1 四个层面的基本用法1 Primitives1.1 new expression1.2 delete expression1.3 调用构造函数与析构函数1.4 array new & array delete1.4.1 array new0 概述 C应用程序malloc非常重要 可以看出,C内存管理主要是有四个层面 0.1 四个层面的基本…

NFT重构票务系统

什么是NFT? NFT是运行在区块链上的一种不可分割的凭证(Non-Fungible Token),或者称为非同质化代币。NFT目前主要用在数字艺术品的铸造、拍卖、流转,因为一个NFT能唯一地确定它的所有者,并可在链上跟踪每一…

自然语言语义分析研究进展_笔记

自然语言语义分析研究进展_笔记 词语语义分析:确定词语意义,衡量两个词之间的语义相似度或相关度; 句子语义分析:研究包含句义分析和句义相似度分析两方面; 文本语义分析:识别文本的意义、主题、类别等语义信息的过程&#xff…

使用@JsonFormat并进一步了解:格式化java.util.Date对象

Java 8 Spring Boot 2.7.3 jackson 2.13.3 -- ben发布于博客园 0、前言 开发过程中遇到问题: 前端调用接口得到的时间对象(java.util.Date)总是存在这样那样的问题。 调查后发现,可以使用 @JsonFormat注解(来自jackson依赖包)解决相关问题。 ben发布于博客园 新建spring …

区块链分叉带来的安全挑战

区块链分叉分为软分叉和硬分叉。本文主要探讨的是硬分叉,一种不支持向后兼容的软件升级方式。硬分叉是共识的分裂或者改变,共识就是区块链系统中各节点达成数据一致性的算法,正常情况下每个节点需要运行相同规则的算法,例如比特币…

计算机毕业设计之java+javaweb的影院管理系统-电影院管理系统

计算机毕业设计之javajavaweb的影院管理系统-电影院管理系统 项目介绍 影院的需求和管理上的不断提升,影院管理的潜力将无限扩大,影院管理系统在业界被广泛关注,本网站及对此进行总体分析,将影院信息管理的发展提供参考。影院管理系统对影院发展有着明显的带动效应,尤其对当地影…

【ManageEngine】OpManager 2022用户体验报告

关于SoftwareViews SoftwareReviews是Info-Tech Research Group的一个部门,是一家世界级的技术研究和咨询公司,拥有超过20年的基于研究的IT建议和技术实施。 SoftwareViews务实的工具和详细的客户洞察力帮助软件购买者在技术决策中取得最大成功。 Sof…

Java并发编程解析 | 基于JDK源码解析Java领域中ReentrantLock锁的设计思想与实现原理 (一)

苍穹之边,浩瀚之挚,眰恦之美; 悟心悟性,善始善终,惟善惟道! —— 朝槿《朝槿兮年说》写在开头在并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。主要原因是,对于多线程实现实现并发,一直以…

全能赛道、热门方向、稀缺数据,“嬴彻-清华AIR杯”自动驾驶技术大赛火热开赛中

如果你关注自动驾驶,那有这样一个算法大赛,值得参与。由卡车自动驾驶领导者嬴彻科技与清华大学智能产业研究院(AIR)精心打造的“嬴彻-清华AIR杯”自动驾驶技术挑战赛正火热开赛中。这是国内首个同时覆盖干线物流和城市道路双赛道的大赛。决策规划是自动驾驶当下的热门方向和技术…

go语言的基本数据类型

基本数据类型中的常量已经介绍了 var const iota 。此处要对字符串特别说明,字符串也会被认为是基本数据类型,字符串实际在底层原理上与复合类型的数据非常相似。同事go语言支持八进制,6进制,科学计数法。空指针的值是nil。 整…

百度地图API

一、百度地图API接入 1、搜索百度地图开发平台 2、注册百度账号 3、登陆并申请成为开发者 4、在百度地图开发平台的首页选择控制台,在控制台中创建应用 创建好应用以后就能在控制台我的应用中看到这个应用,其中最重要的是AK,这是百度地图…

从0-1,如何用低代码搭建管理系统

关键字:功能模块、流程中心、OA 前言:对于搭建系统,字眼上都知道是怎么回事,但要怎么搭建到最后怎么呈现一个投入运作的系统,估计就很少人知道了。当然作为专业的程序员肯定知道怎么操作,但是不是必须要专业…