二十三种设计模式第一篇-设计模式的原则和分类

news2025/1/21 4:46:58

怎么说,其实我挺讨厌设计模式的,但是不得不说,这东西解决问题确实有一手,并且设计模式确实规范了我们在开发中的代码,并且我们可以使用这二十三种设计模式解决我们碰到的业务问题,并且我们学的框架里边多多少少使用了设计模式。
我作为刚刚进入门槛的小白,还尚未是一个合格的程序员,老实说,我真的讨厌这个设计模式,但是软件设计师考试,找工作面试,看框架底层源码都有他的影子,没办法,为了我自己的程序员生涯,我又不得不去学,事先说明,博主很菜,写的文档也不一定很准确,但是我还是会认真的写好这几篇关于设计模式的文章的。

没办法,人总的向前看(当然要学会偷一点懒),好了废话就说到这里,有兴趣就看,没兴趣当做博主在这里记录笔记就行了。

设计模式的6大准则:

讲设计模式之前,我们需要软件开发的6大准则:
我先背一下:

  1. 迪米特原则
  2. 开闭原则
  3. 里氏替换原则
  4. 单一职责
  5. 依赖倒置原则
  6. 接口隔离原则

嗯,没错,就是这几大准则,原则准则,我也懒得管了。

迪米特原则(Law of Demeter,LoD)

一个对象应该对其他对象有最少的了解。也就是说,一个对象应该对自己需要的对象和方法尽可能少的了解,只与直接的朋友通信。直接的朋友是指出现在成员变量、方法输入、输出参数中的类。这样可以降低对象之间的耦合度。

开放封闭原则(Open-Closed Principle,OCP)

开放封闭原则(Open-Closed Principle,OCP):一个软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。在不修改原有代码的情况下,可以通过扩展来增加新的功能。

里氏替换原则(Liskov Substitution Principle,LSP)

里氏替换原则(Liskov Substitution Principle,LSP):子类必须能够替换掉它们的父类,而不影响程序的正确性。也就是说,继承关系中父类能出现的地方子类都可以出现。

单一职责原则(Single Responsibility Principle,SRP)

单一职责原则(Single Responsibility Principle,SRP):一个类只负责一个功能领域中的一种职责,即一个类只有一个引起它变化的原因。这样可以使类更加内聚,降低代码的耦合度。

依赖倒置原则(Dependency Inversion Principle,DIP)

依赖倒置原则(Dependency Inversion Principle,DIP):高层模块不应该依赖于底层模块,两者都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。

接口隔离原则(Interface Segregation Principle,ISP)

接口隔离原则(Interface Segregation Principle,ISP):一个类对另一个类的依赖应该建立在最小的接口上。应该尽量避免一个类依赖于它不需要的接口。

===============================================
这六大原则是我们了解设计模式的基础,需要了解加记忆,我相信只要你理解一下就很容易掌握的,毕竟确实也不是很难记,这个面试常问,我觉得这样的题应该算是送分题,但是面试官可能会让你举例说明,这样就不一样了。

设计模式的类型:

创建型模式共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式,原型模式。(工单建原)

结构性模式共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。(适装外代享组桥)

行为型模式共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。(策模观迭责命备,状访中解)

在这里插入图片描述
我给一张图放置这里,不要小瞧这张图,软件设计师中,靠这张图,你可以提高好几分。
本篇到此结束,下篇将使用图片和代码的形式进行设计模式正片。

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

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

相关文章

利用Python操作Mysql数据库

我们在进行Python编程的时候,时常要将一些数据保存起来,其中最方便的莫过于保存在文本文件了。但是如果保存的文件太大,用文本文件就不太现实了,毕竟打开都是个问题,这个时候我们需要用到数据库。提到数据库&#xff0…

怎样从零开始编译一个魔兽世界开源服务端Windows

怎样从零开始编译一个魔兽世界开源服务端Windows 第二章:编译和安装 我是艾西,上期我们讲述到编译一个魔兽世界开源服务端环境准备,那么今天跟大家聊聊怎么编译和安装我们直接进入正题(上一章没有看到的小伙伴可以点我主页查看&…

haproxy负载均衡+keepalived高可用

LVS和haproxy、nginx做负载均衡时的区别 调度算法 LVS:轮询(rr)、加权轮询(wrr)、最少连接(lc)、加权最少连接(wlc)、源地址哈希值(sh)、目的地址哈希(dh) haproxy:轮询(roundrobin)、加权轮询(static-rr)、最少连接&#xff08…

2023有潜力的新药都有哪些?新药筛选方法总结

2023有潜力的新药都有哪些?这是一道蕴含无限可能性和未知挑战的问题。新药研发是制药公司不断追求的目标,每一次成功都可以带来巨额利润,改善患者生命质量,成就公司声誉。但与此同时,新药研发风险也是极大的&#xff0…

电梯导航栏的实现

点击跳到指定位置类似于电梯导航 .w {width: 1200px;margin: 0 auto; } .fixedtool {position: fixed;top: 100px;left: 50%;margin-left: -676px;width: 66px;background-color: #fff;display: none; }.fixedtool li {height: 32px;line-height: 32px;text-align: center;fo…

基于dsp+fpga的半导体运动台高速数据采集FPGA endac设计(三)

EnDat 双向串行通信协议的实现 数据(测量值或参数)可以在位置编码器和 EnDat 协议内核之间进行双向传输, EnDat 协议内核的收发单元支持 RS-485 差分信号传输,数据传输与传感伺服控制系统 生成的时钟脉冲同步。传输的数据…

如何将Postman API测试转换为JMeter以进行扩展

许多测试工程师使用Postman进行API测试自动化。他们发现端点,发出请求,创建测试数据,运行回归测试,使用Newman等实现API测试的持续集成。但是,Postman有一定的测试限制。希望获得更多负载测试能力的开发人员&#xff0…

系统集成项目管理工程师 笔记(第10章:项目质量管理)

文章目录 10.1.2 质量管理及其 发展史 35610.1.3 项目质量管理 35810.2.2 规划质量管理的输入 35910.2.3 规划质量管理的工具与技术 3601、成本效益分析法2、质量成本法(一致性成本【预防、评价】 和 非一致性成本【内部、外部】)3、七种基本质量工具&am…

数字设计小思 - 谈谈时钟:数字系统的心脏

前言 本系列整理数字系统设计的相关知识体系架构,为了方便后续自己查阅与求职准备。时钟作为数字系统中的“心脏”,其设计的质量好坏直接关乎整个系统的稳定性,本文主要介绍了数字设计中的常见的时钟产生电路和时钟类型,并进行相…

音视频八股文(7)-- 音频aac adts

AAC介绍 AAC(Advanced Audio Coding)是一种现代的音频编码技术,用于数字音频的传输和存储领域。AAC是MPEG-2和MPEG-4标准中的一部分,可提供更高质量的音频数据,并且相比于MP3等旧有音频格式,AAC需要更少的…

【经典题】二叉搜索树与双向链表

二叉搜索树与双向链表链接 解题思路 思路1 : 中序遍历,将节点放进vector中,再改链接关系,这很容易想出并解决,但这样明显不符合题意。 思路2: 这道题目要求将一个二叉搜索树转换成一个排序的双向链表&a…

php连接sqlserver

1.使用工具 Wampserver--3.3 sqlserver2023 php7.4.33 2.连接流程 1.下载Microsoft Drivers for PHP for SQL Server 下载地址:下载 Microsoft Drivers for PHP for SQL Server - PHP drivers for SQL Server | Microsoft Learn 2.下载Microsoft ODBC Driver …

简记二分算法模板与代码案例:整数二分和浮点数二分

本文以 Java 语言实现,整理的代码模板适用于编程竞赛。对代码模板原理的讲解不多,主要记录一下如何使用。 目录 一、算法模板 (1)整数二分 (2)浮点数二分 二、例题 例题:acwing-789.数的范…

开源网安入选“2023年中国信通院开源供应商名录”

近日,为进一步推进开源供应链安全合规发展,中国信息通信研究院云大所发布了“2023年中国信通院开源供应商名录”(简称名录),名录供应商均为通过可信开源供应链系列评估的企业。名录范围涵盖云计算、大数据、中间件、数…

【致敬未来的攻城狮计划】第1期 作业汇总贴 + 获奖公布

​ 文章目录 一、写在前面二、种子学员介绍三、作业贴汇总四、小小总结五、获奖公布六、学员有话说七、特别致谢 一、写在前面 时间过得真快,距离 【致敬未来的攻城狮计划】第1期 的发起,已经过去一个多月了,而第1期的真正学习考核期也将在…

虹科案例 | 如何通过智能、非接触式测量解决方案,提高起重机的安全和效率?

PART 1 案例详情 自建造初期以来,起重机行业已经走了很长一段路。技术的使用在行业进步中发挥了重要作用,降低了使用桥式起重机的危险性。特别是,智能、非接触式测量解决方案通过使用高架升降机更安全、更高效、更高效,为行业的进…

如何将化学分子SMILES字符串转化为Pytorch图数据结构——ESOL分子水溶性数据集解析

硬核原创,转载请注明出处: https://leytton.blog.csdn.net/article/details/130406553 一、前言 在用Pytorch图神经网络对化学分子进行数据分析的时候,经常使用现有的数据集。看到自动处理完毕的数据结构,里面的特征值让我们一脸…

springsecurity工作流程

Spring Security 的工作流程如下: 1.当用户请求一个受保护的资源时,Spring Security 的过滤器链会拦截该请求。 2.然后 Spring Security 会判断该请求是否认证(authenticated)和授权(authorized)。 认证(Authentication):验证用户身份,判断用户是否能登录系统。Spring Securi…

Linux应用编程(线程同步)(互斥锁)

对于一个单线程进程来说,它不需要处理线程同步的问题,所以线程同步是在多线程环境下可能需要注意的一个问题。线程的主要优势在于,资源的共享性,譬如通过全局变量来实现信息共享,不过这种便捷的共享是有代价的&#xf…

docker网桥冲突解决方法

Docker网桥网段冲突导致访问不到容器问题 三种情况 一、docker0所用网段与局域网所用网段相同,导致网桥冲突,这会造成冲突网段无法访问docker服务。 解决办法: 1.停止docker,删除冲突网桥 systemctl stop docker ip link del doc…