软件开发23种设计模式

一、设计模式分类

软件开发的23种模式,主要分类有创建型模式,结构型模式,行为型模式三种,相关分类如下:

设计模式是一种面向对象编程的思想,它是由Gamma等人在《设计模式:可复用面向对象软件的基础》一书中首次提出的,用来解决软件设计中的一些常见问题。以下是23种经典的设计模式及其

二、23种设计模式简要介绍

  1. 工厂方法模式(Factory Method Pattern):定义一个创建对象的接口,但是让子类来决定实例化哪个类,使得类的实例化延迟到子类中进行。

  2. 抽象工厂模式(Abstract Factory Pattern):提供一个接口,用于创建一系列相关或者相互依赖的对象,而无需指定它们的具体类。

  3. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。

  4. 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

  5. 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过复制这些原型来创建新的对象。

  6. 适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另外一个接口。适配器模式让原本不兼容的类可以合作无间。

  7. 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们可以独立地变化。

  8. 组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

  9. 装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式比生成子类更加灵活。

  10. 外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

  11. 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象。

  12. 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。

  13. 责任链模式(Chain of Responsibility Pattern):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。

  14. 命令模式(Command Pattern):是一种行为型设计模式,它通过将请求封装成对象来使得系统可以使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

  15. 解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

  16. 迭代器模式(Iterator Pattern):提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

  17. 中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

  18. 备忘录模式(Memento Pattern):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。

  19. 观察者模式(Observer Pattern):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生改变时,它的所有依赖者都会收到通知并且自动更新。

  20. 状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。

  21. 策略模式(Strategy Pattern):定义一系列的算法,把它们一个个封装起来,并使它们可相互替换。策略模式使得算法可独立于使用它的客户而变化。

  22. 模板方法模式(Template Method Pattern):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变一个算法的结构的情况下,重新定义该算法的某些特定步骤。

  23. 访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。

这些23种设计模式是在软件开发中被广泛使用的模式,通过应用这些模式可以提高代码的可复用性、灵活性、可扩展性等方面的特性,帮助开发人员更快地构建出高质量的软件系统。学习设计模式的过程中,也去练手UML建模,会有更多的收获。

三、结束语

以上是23种设计模式简介,后续会继续去详细的说明与实践,相关书籍的学习,大家可以去搜索,这里先不做推荐。

如果对你有用,记得点赞收藏。

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

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

相关文章

中新青年领导人交流营走进李良济,零距离感受中医药文化的魅力

7月8日晚,2024中新青年领导人交流营在苏州正式启动。该交流营主题为“青年创业和可持续发展”,由中华全国青年联合会、新加坡全国青年理事会主办,江苏省、北京市青年联合会与苏州市人民政府承办,苏州市青年联合会与苏州工业园区管…

k8s核心操作_Ingress统一网关入口_域名访问配置_ingress域名转发规则配置_根据域名访问不同服务---分布式云原生部署架构搭建026

上一节我们已经把 ingress 安装好了可以看到 kubectl get svc -A 可以看到 出现了ingress-nginx 的service,在ingre-nginx这个命名空间中,有两个,一个是 ingress-nginx-controller 开了两个一个是对应http,一个对应https 一个是 ingress-nginx-controller-admission 对…

银河麒麟(Kylin)KYSEC使用

1.推荐使用方法 *.临时禁用指令: setstatus disable--禁用 注:执行reboot后系统会自动启动 2.选用指令: *.永久禁用指令: setstatus disable -p *.重启后,KYSEC还是处理关闭关状态。 *.使用如下指令启用:setstatus enable …

Linux(一)线程——何为线程???Linux线程控制

文章目录 什么是线程???线程和进程的区别和联系Linux线程控制POSIX线程库创建线程线程等待线程终止线程分离 什么是线程??? 在一个程序里的一个执行路线就叫做线程(thread)。更准确的…

python用selenium网页模拟时无法定位元素解决方法1

进行网页模拟时,有时我们明明可以复制出元素的xpath,但是用selenium的xpath click无法点击到元素。这种情况有几种原因,本文写其中一种——iframe 比如下图网址,第二行出现iframe,则往下的行内元素都会定位不到&#…

2024最新最全【Java】全栈,零基础入门到精通

Java基础 本文章是作者的学习笔记,帮助初学者快速入门,内容讲的不是很细,适合初学者,不定时更新。 目录 Java基础数据类型1.基本类型(primitive type)1-1 整数类型1-2 浮点类型1-3 字符类型1-4 boolean类型 2.引用数据类型3.类型…

java:将集合中的数据放到文件中

代码实现目标&#xff1a; 将集合中的数据写道文件中通过字符缓冲输出流实现 代码展示 public static void main(String[] args) throws IOException {//创建ArrayList集合ArrayList<Student> array new ArrayList<>();//创建学生对象Student s1 new Student(&…

面试总结-基础js

一、变量提升&#xff08;函数里面先形参赋值&#xff0c;再变量提升&#xff0c;最后执行代码&#xff09; 1、概念&#xff1a;当浏览器开辟出供代码执行的栈内存后&#xff0c;代码并没有自上而下立即执行&#xff0c;而是继续做了一些事情&#xff0c;把当前作用域所有带v…

【前端】有时候你可能需要SSE而不是WebSocket

深度解析&#xff1a;轮询、SSE 和 WebSocket 在构建实时应用时&#xff0c;开发者面临多种选择&#xff0c;其中最常见的是轮询&#xff08;Polling&#xff09;、服务器推送事件&#xff08;Server-Sent Events&#xff0c;SSE&#xff09;和 WebSocket。本文将深入解析这三…

kind kubernetes(k8s虚拟环境)使用本地docker的镜像

kubernetes中&#xff0c;虽然下载镜像使用docker&#xff0c;但是存储在docker image里的镜像是不能被k8s直接使用的&#xff0c;但是kind不同&#xff0c;可以使用下面的方法&#xff0c;让kind kubernetes环境使用docker image里的镜像。 kind – Quick Start 例如&#x…

M12电源分配器:高效率与可靠性的工业解决方案

关键词&#xff1a;M12电源分配器、M12电源接线盒、M12电源分线盒 摘要 M12电源分配器是工业环境中实现高效与可靠电源管理的现代化解决方案。该设备采用坚固的金属外壳和封闭式设计&#xff0c;保证了在严苛工业条件下的稳定运行&#xff0c;达到IP67等级的防护性能&#xf…

FastAPI 学习之路(三十八)Static Files

如果使用前后台不分离的开发方式&#xff0c;那么模版文件中使用的静态文件&#xff0c;比如css/js等文件的目录需要在后台进行配置&#xff0c;以便模版渲染是能够正确读取到这些静态文件的。那么我们如何处理呢&#xff1f; 首先安装依赖 pip install aiofiles 我们看下如何…

蓝队必备技能--yara-让自己编写AVVT

&#x1f3bc;个人主页&#xff1a;金灰 &#x1f60e;作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持&#xff01;❤️ &#x1f34a;易编橙终身成长社群&#…

51单片机STC89C52RC——16.1 五线四相步进电机

目录 目的/效果 一&#xff0c;STC单片机模块 二&#xff0c;步进电机 2.2 什么是步进电机&#xff1f; 2.2.1 步进电机驱动板 静态参数 动态参数 2.2.2 五线四相 单相激励步进 双相激励步进 混合激励驱动 2.3 细分驱动 2.4 通过数字信号控制旋转位置和转速。 2…

基于Java+Vue的场馆预约系统源码体育馆羽毛球馆篮球馆预约

市场前景 市场需求持续增长&#xff1a;近年来&#xff0c;随着人们生活水平的提高和休闲娱乐需求的多样化&#xff0c;各类场馆&#xff08;如体育馆、图书馆、博物馆、剧院等&#xff09;的访问量不断增加。然而&#xff0c;传统的预约方式往往存在效率低下、信息不透明等问…

AI算力中心研究分析

中国 AI 算力中心研究报告 算力产业稳健发展&#xff0c;算力创新能力持续增强&#xff0c;推动我国数字经济量质齐升。 2022 年我国算力规模稳步扩张&#xff0c;算力发展为拉动我国 GDP 增长做出突出贡献&#xff0c;在 2016-2022 年期间&#xff0c;我国算力规模平均每年增…

[计算机网络] VPN技术

VPN技术 1. 概述 虚拟专用网络&#xff08;VPN&#xff09;技术利用互联网服务提供商&#xff08;ISP&#xff09;和网络服务提供商&#xff08;NSP&#xff09;的网络基础设备&#xff0c;在公用网络中建立专用的数据通信通道。VPN的主要优点包括节约成本和提供安全保障。 优…

IT专业入门,高考假期预习指南(C++学习路线)

目录 IT专业入门&#xff0c;高考假期预习指南 一、V C的学习内容: 二、C学习书籍: 三、学习网站: 四、技术学习路线图&#xff1a; IT专业入门&#xff0c;高考假期预习指南 七月来临&#xff0c;各省高考分数已揭榜完成。而高考的完结并不意味着学习的结束&#xff0c;而…

程序设计与问题求解 实验二 循环结构程序设计

目录 引言 一&#xff0e;实验目的&#xff1a; 二、实验内容和步骤: 1. 分析并修改下面程序错误&#xff0c;使之能够正常运行。 2. 编写程序实现以下功能 三、实验小结 引言 我想把大学期间写的材料挑选一些发上来保存一下&#xff0c;这是本人大学期间做的一次实验作业…

小型内衣裤洗衣机哪个牌子好?五大卓越臻品不容错过!

随着科技的发展&#xff0c;市面上也出现许多便利的小家电。其中被多次讨论起来的莫过于是内衣洗衣机&#xff0c;选择一款耐用、质量优秀的内衣洗衣机&#xff0c;不仅可以减少洗衣负担&#xff0c;还能提供高效的洗涤效果。然而&#xff0c;随着内衣洗衣机的爆火&#xff0c;…