常见的设计模式

一、是什么

在软件工程中,设计模式是对软件设计中普遍存在的各种问题所提出的解决方案

设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案

设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力

因此,当我们遇到合适的场景时,我们可能会条件反射一样自然而然想到符合这种场景的设计模式

比如,当系统中某个接口的结构已经无法满足我们现在的业务需求,但又不能改动这个接口,因为可能原来的系统很多功能都依赖于这个接口,改动接口会牵扯到太多文件

因此应对这种场景,我们可以很快地想到可以用适配器模式来解决这个问题

二、有哪些

常见的设计模式有:

  • 单例模式
  • 工厂模式
  • 策略模式
  • 代理模式
  • 中介者模式
  • 装饰者模式
  • ......

单例模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点。实现的方法为先判断实例存在与否,如果存在则直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象

如下图的车,只有一辆,一旦借出去则不能再借给别人:

工厂模式

工厂模式通常会分成3个角色:

  • 工厂角色-负责实现创建所有实例的内部逻辑.
  • 抽象产品角色-是所创建的所有对象的父类,负责描述所有实例所共有的公共接口
  • 具体产品角色-是创建目标,所有创建的对象都充当这个角色的某个具体类的实例

策略模式

策略模式,就是定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换

至少分成两部分:

  • 策略类(可变),策略类封装了具体的算法,并负责具体的计算过程
  • 环境类(不变),接受客户的请求,随后将请求委托给某一个策略类

代理模式

代理模式:为对象提供一个代用品或占位符,以便控制对它的访问

例如实现图片懒加载的功能,先通过一张loading图占位,然后通过异步的方式加载图片,等图片加载好了再把完成的图片加载到img标签里面

中介者模式

中介者模式的定义:通过一个中介者对象,其他所有的相关对象都通过该中介者对象来通信,而不是相互引用,当其中的一个对象发生改变时,只需要通知中介者对象即可

通过中介者模式可以解除对象与对象之间的紧耦合关系

装饰者模式

装饰者模式的定义:在不改变对象自身的基础上,在程序运行期间给对象动态地添加方法

通常运用在原有方法维持不变,在原有方法上再挂载其他方法来满足现有需求

三、总结

不断去学习设计模式,会对我们有着极大的帮助,主要如下:

  • 从许多优秀的软件系统中总结出的成功的、能够实现可维护性、复用的设计方案,使用这些方案将可以让我们避免做一些重复性的工作

  • 设计模式提供了一套通用的设计词汇和一种通用的形式来方便开发人员之间沟通和交流,使得设计方案更加通俗易懂

  • 大部分设计模式都兼顾了系统的可重用性和可扩展性,这使得我们可以更好地重用一些已有的设计方案、功能模块甚至一个完整的软件系统,避免我们经常做一些重复的设计、编写一些重复的代码

  • 合理使用设计模式并对设计模式的使用情况进行文档化,将有助于别人更快地理解系统

  • 学习设计模式将有助于初学者更加深入地理解面向对象思想

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

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

相关文章

倾斜摄影测量实景三维建模ContextCapture Master

目录 专题一 倾斜摄影测量原理及应用领域 专题二 倾斜摄影测量数据采集方法 专题三 CC支持数据类型及导入数据方法 专题四 CC空三计算参数设置及数据处理方法 专题五 CC控制点与连接点添加及应用 专题六 三维重建及应用 专题七 三维模型修复与场景拼接 更多应用 Contex…

Ceph-deploy跳过gpg-key验证(离线环境安装Ceph)

问题 CentOS-7.6.1810离线环境搭建Ceph环境时出现gpg-key安装源公钥检查错误。原因是执行ceph-deploy install 命令的服务器无法访问互联网。具体报错如下图: 解决 安装命令后新增--no-adjust-repos参数即可跳过安装 GPG 密钥。 命令如下: ceph-deplo…

考研408,1000道精心打磨的计算机考研题,选它就对了!

前言:大家好,我是小威,今天给大家安利一本考研408的书籍,身边有考研同学也都在用,书籍确实不错! 以下正文开始 计算机考研1000题 难度高! 知识点多! 复习时间短! 不…

中国电子学会2023年09月份青少年软件编程Scratch图形化等级考试试卷二级真题(含答案)

2023-09 Scratch二级真题 分数:100 测试时长:60min 一、选择题(共25题,共50分) 1.点击绿旗,运行程序后,舞台上的图形是?(D )(2分)…

webpack babel

构建工具 简介 当我们习惯了在node中编写代码的方式后,在回到前端编写html、css、js这些东西会感觉到各种的不便。比如:不能放心的使用模块化规范(浏览器兼容性问题)、即使可以使用模块化规范也会面临模块过多时的加载问题。我们…

如何使用Net2FTP搭建免费web文件管理器打造个人网盘

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一,特别是智能设备的大面积使用,无论是个人…

rabbitMq虚拟主机概念

虚拟主机是RabbitMQ中的一种逻辑隔离机制,用于将消息队列、交换机以及其他相关资源进行隔离。 在RabbitMQ中,交换机(Exchange)用于接收生产者发送的消息,并根据特定的路由规则将消息分发到相应的队列中。而虚拟主机则…

Linux 的热插拔机制通过 Udev(用户空间设备)实现、守护进程

一、Udev作用概述 udev机制简介udev工作流程图 二、Linux的热拔插UDEV机制 三、守护进程 守护进程概念守护进程在后台运行基本特点 四、守护进程和后台进程的区别 一、Udev作用概述 udev机制简介 Udev(用户空间设备)是一个 Linux 系统中用于动态管…

瑞芯微:基于RK3568的深度估计模型部署

根据单张图像估计深度信息是计算机视觉领域的经典问题,也是一项具有挑战的难题。由于单目图像的尺度不确定,传统方法无法计算深度值。 随着深度学习技术的发展,该范式已经成为了估计单目图像的深度信息的一种解决方案。早期的深度估计方法大多…

线程安全(JAVA)

线程安全对于我们编写多线程代码是非常重要的。 什么是线程安全? 在我们平时的代码中有些代码在单线程程序中可以正常执行,但如果同样的代码放在在多个线程中执行就会引发BUG,而这种现象我们一般称为 “线程安全问题” 或 “线程不安全”。…

(动手学习深度学习)第7章 稠密连接网络---DenseNet

目录 DenseNetDenseNet的优点:DenseNet的改进思路总结 DenseNet代码实现 DenseNet DenseNet的优点: 省参数。在 ImageNet 分类数据集上达到同样的准确率,DenseNet 所需的参数量不到 ResNet 的一半。对于工业界而言,小模型可以显著…

【C++】哈希 Hash(闭散列、开散列介绍及其实现)

一、unordered系列关联式容器 在 C98 中,STL 提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 O(logN),即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是&…

怎样使用ovsyunlive在web网页上直接播放rtsp/rtmp视频

业务中需要在网页中直接播放rtsp和rtmp视频,多方比较测试发现ovsyunlive的播放器能直接播放rtsp/rtmp视频,还是非常方便简洁,使用过程如下: 1,Windows系统在github上面下载ovsyunlive绿色包下载解压。 github地址&am…

kafka和rocketMq的区别

kafka topic 中每一个分区会有 Leader 与 Follow。Kafka 的内部机制可以保证 topic 某一个分区的 Leader 与 Follow 不在同一台机器上 Leader 节点承担一个分区的读写,Follow 节点只负责数据备份 如果 Leader 分区所在的 Broker 节点宕机,会触发主从节…

微信小程序报request:fail url not in domain list的解决方法

情况1:未设置合法域名 解决方法:请在微信公众平台登录小程序后台 > 开发管理 > 开发设置 > 服务器域名 情况2:设置了合法域名,开发工具仍然报错 解决方法: 在右上角点击详情,之后刷新一下项目配置,看看有…

如何开发你的第一个Flutter App?

Flutter这些年发展的很快,特别是在 Google 持续的加持下,Flutter SDK 的版本号已经来到了 3开头,也正式开始对 Windows、macOS 和 Linux 桌面环境提供支持。如果从 Flutter 特有的优势来看,我个人认为主要是它已经几乎和原生的性能…

腾讯云88,阿里云99,现在都这么卷了吗?!

你是否曾经想过,云服务器的价格竟然可以如此亲民?现在,腾讯云和阿里云竟然都推出了超低价位的云服务器,只要88元和99元!这让我们这些自媒体人、创业者、开发者等都感到非常惊喜。可以看一下配置和价格: 可…

鸡尾酒学习——原谅(自制)

1、材料:冰块、君度、蓝橙力娇酒、雪碧、橘子。 2、口感:甜味为主带着一丝丝酸味,喝起来比较清爽,没有一丝酒味的小甜酒。(喜欢喝酒的可以多加酒,不喜欢喝酒的可以适量减少酒) 3、视觉效果&…

适用于 iOS 的 10 个最佳数据恢复工具分享

在当今的数字时代,我们的移动设备占据了我们生活的很大一部分。从令人难忘的照片和视频到重要的文档和消息,我们的 iOS 设备存储了大量我们无法承受丢失的数据。然而,事故时有发生,无论是由于软件故障、无意删除,甚至是…

this.$message提示内容添加换行

0 效果 1 代码 let msgArr [只允许上传doc/docx/xls/xlsx/pdf/png/jpg/bmp/ppt/pptx/rar/zip格式文件,且单个文件大小不能超过20MB,已过滤无效的文件] let msg msgArr.join(<br/>) this.$message({dangerouslyUseHTMLString: true,message: msg,type: warning })