【设计模式】设计模式学习线路与总结

news2025/1/19 0:50:42

文章目录

    • 一. 设计原则与思想
    • 二. 设计模式与范式
    • 三. 设计模式进阶
    • 四. 项目实战

设计模式主要是为了改善代码质量,对代码的重用、解耦以及重构给了最佳实践,如下图是我们在掌握设计模式过程中需要掌握和思考的内容概览。
在这里插入图片描述

一. 设计原则与思想

  1. 面向对象编程基础

掌握类、对象、继承、多态等基本概念。

【《设计模式之美》】如何取舍继承与组合

【设计模式之美】面向对象分析方法论与实现(一):需求分析方法论

【设计模式之美】面向对象分析方法论与实现(二):需求到接口实现的方法论

 

  1. 设计原则与方法论

熟悉SOLID原则(单一职责、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则)及其在设计模式中的应用。

【设计模式之美】SOLID 原则之一:怎么才算是单一原则、如何取舍单一原则

【设计模式之美】SOLID 原则之二:开闭原则方法论、开闭原则如何取舍

【设计模式之美】SOLID 原则之三:里式替换(LSP)跟多态有何区别?如何理解LSP中子类遵守父类的约定

【设计模式之美】 SOLID 原则之四:接口隔离原则有哪三种应用?原则中的“接口”该如何理解?

【设计模式之美】 SOLID 原则之五:依赖反转原则:将代码执行流程交给框架

 

3. 规范与重构

【设计模式之美】重构一:重构定义、单元测试保证重构正确性

【设计模式之美】重构二:重构提高代码可测试性、mock替换外部服务

【设计模式之美】重构(三)之解耦方法论:如何通过封装、抽象、模块化、中间层等解耦代码?
 

【设计模式之美】快速地改善代码质量的几条编程规范(上)

 

二. 设计模式与范式

  • 创建型模式,如工厂模式、单例模式、建造者模式。

  • 结构型模式,如适配器模式、装饰器模式、代理模式。

【设计模式】继承的替代方式:装饰者模式-动态丰富对象功能,而不是实现大量的继承实例

  • 行为型模式,如策略模式、观察者模式、模板方法模式。

 

三. 设计模式进阶

  1. 深入学习进阶设计模式
  • 并发模式,如生产者-消费者模式、读写锁模式。
  • 学习并实现其他高级模式,如享元模式、访问者模式、备忘录模式。
  1. 学习反模式及其避免
    理解反模式(如过度设计、不足设计等)及其对软件设计的影响。

  2. 领域驱动设计(DDD)与设计模式的结合
    理解如何将领域驱动设计中的战略设计与设计模式结合,优化复杂系统的设计。

 

四. 项目实战

【设计模式-2】策略模式 - 避免冗余的if-else判断。数据库迁移框架、flink 类型转换框架例子对策略模式的使用

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

功能详解-电商接口丨电商API

随着电商平台各类机制日益成熟,电商接口逐渐被大家所熟知,淘宝、天猫、京东、拼多多、抖店、快手、小红书这些都是主流的电商平台,为了提升电商管理系统的效率,开发者可以通过电商接口将多个电商平台的数据和功能集成。 电商接…

海外短剧CPS推广分佣系统平台讲解,他和短剧播放平台有啥区别?

首先来讲讲什么是海外短剧系统?什么是海外短剧cps系统?这俩有何区别? 海外短剧系统 顾名思义:就是做一套海外短剧系统,把剧放在自己的系统内,让用户来充值,充值的钱全部都是我自己的&#xff…

【人工智能】--生成对抗网络

个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏: 专业知识 文章目录 🍉引言 🍉GAN 的基本原理 🍈生成器(Generator) 🍈判别器&…

[数据集][目标检测]刀具匕首持刀检测数据集VOC+YOLO格式8810张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8810 标注数量(xml文件个数):8810 标注数量(txt文件个数):8810 标注…

超详细!大模型面经指南(附答案)

目录 大模型(LLMs)基础面 1. 目前 主流的开源模型体系 有哪些? 2. prefix LM 和 causal LM 区别是什么? 3. 涌现能力是啥原因? 4. 大模型LLM的架构介绍? 大模型(LLMs)进阶面 1. l…

mysql:部署MySQL 8.0 环境

mysql网址:MySQL 点击 MySQL Community Server 选择合适的版本 选择8.0版本 下载完成,点击mysql-installer-community-8.0.26.0.msi文件,打开安装向导。 选择自定义安装类型 打开“Select Products” 窗口,可以定制需要安装的产…

Teamviewer删除可信任设备

目前基本上主流的远程连接软件都有限制,要么收费; Teamviewer可信任设备有限,超出限制就会提示错误,需要删除多余的设备才能登陆账号! 需要登陆这个网站 Teamviewer Management console,才能修改&#xff…

高级IO_多路转接之Poll

文章目录 前言一、poll二、poll使用步骤总结 前言 上一章我们学习了select,但是select作为早期的多路转接接口,缺点十分明显,于是又出现poll和epoll等接口,今天我们就来学习一下poll的使用 提示:以下是本篇文章正文内…

7.4总结

今天写了几道题目 最近,一年级学生马克西姆学习了科拉兹猜想,但他在讲课时没有太注意,所以他认为猜想中提到了以下过程: 有一个变量 $$$x$$$ 和一个常数 $$$y$$$ 。下面的操作要执行 $$$k$$$ 次: - 将 $$$x$$$ 增加…

MySQL资讯|2024年MySQL第一个长期支持版本8.4发布

📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师 🏆 近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者、ACDU成员 🔥 三连支持:欢迎 ❤️关注…

React 中如何使用 Monaco

Monaco 是微软开源的一个编辑器,VSCode 也是基于 Monaco 进行开发的。如果在 React 中如何使用 Monaco,本文将介绍如何在 React 中引入 Monaco。 安装 React 依赖 yarn add react-app-rewired --dev yarn add monaco-editor-webpack-plugin --dev yarn…

【Android面试八股文】Android性能优化面试题:怎样检测函数执行是否卡顿?

文章目录 卡顿一、可重现的卡顿二、不可重现的卡顿第一种方案: 基于 Looper 的监控方法第二种方案:基于 Choreographer 的监控方法第三种方案:字节码插桩方式第四种方案: 使用 JVMTI 监听函数进入与退出总结相关大厂的方案ArgusAPMBlockCanaryQQ空间卡慢组件Matrix微信广研参…

DBSCAN数学表示

DBSCAN(Density-Based Spatial Clustering of Applications with Noise),是判断一个点集,其中哪些点是聚类,哪些点是噪声点。 和kmean方法相比,这种ACM方法还是比较难以写成解析表达式的。 是半径。N是点集…

C语言程序是怎么在计算机中运行起来的

hello.c #include <stdio.h>int main(){printf("hello,world\n");return 0; }这段 C语言程序的代码能被编程人员读懂&#xff0c;但是计算机系统读不懂。C语言、C、java 这些高级编程语言本质上还是人类用的语言而不是计算机用的语言。 为了能在计算机上运行这…

传统数据处理系统存在的问题

传统应用的数据系统架构设计时&#xff0c;应用直接访问数据库系统。当用户访问量增加时&#xff0c;数据库无法支撑日益增长的用户请求的负载&#xff0c;从而导致数据库服务器无法及时响应用户请求&#xff0c;出现超时的错误。 出现这种情况以后&#xff0c;在系统架构上就采…

Redis 7.x 系列【18】事务

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 命令2.1 MULTI2.2 EXEC2.3 DISCARD2.4 WATCH2.5 UNWATCH 3. 事务中的错误4.…

动态校验列表数据方案

背景&#xff1a;当select 选择A 的时候是必填&#xff0c;选B的时候是非必填 那么我们需要监听 selec 变化时候对 列表的 :edit-rules“validRulesList” 进行重新赋值必填校验的true, &#xff08;跟对列表内上传文件&#xff0c;对列表文件进行赋值名字一样道理&#xff0c;…

在Linux上查找文件的2个好用的命令

1. locate xx &#xff08;查找带xx字符的所有文件或目录&#xff09; 在终端输入命令 locate lua&#xff0c;可以看到&#xff0c;所有带lua字符的文件或目录都会被搜索出来。 2. find / -name xx &#xff08;查找名为xx的文件或目录&#xff09; 在终端输入命令 find …

Java通过GeoLite2-City.mmdb 进行IP信息查询地理定位和经纬度筛选。

引入依赖 <dependency><groupId>com.maxmind.geoip2</groupId><artifactId>geoip2</artifactId><version>4.2.0</version> </dependency>下载数据文件&#xff1a;https://download.lin2ur.cn/GeoLite2/ package com.cqclo…

Springboot+Vue3开发学习笔记《2》

SpringbootVue3开发学习笔记《2》 博主正在学习SpringbootVue3开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。 总共涉及两部分&#xff0c;第一部分为基础部分学习&#xff0c;第二部分为实战部分。 一、学习路径 1.1 基础部分 配置文件整合MyBatisBea…