【设计模式】 基本原则、设计模式分类

在这里插入图片描述

设计模式

设计模式是软件工程中的一种通用术语,指的是针对特定问题的经过实践验证的解决方案。设计模式并不是最终的代码实现,而是描述了如何解决某一类问题的思路和方法。

如果熟悉了设计模式,当遇到类似的场景,我们可以快速地参考设计模式实现代码。不仅可以加谏我们的编码速度,也提升了代码的可扩展性可重用性可维护性!

SOLID原则是面向对象设计中的五个基本原则,旨在提高软件的可维护性和可扩展性。

  1. 单一职责原则每个类应该只有一个职责,或者说每个类应该只有一个引起变化的原因
  2. 开放-关闭原则:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭
  3. 里氏替换原则子类对象应该能够替换父类对象而不影响程序的正确性
  4. 接口隔离原则:不应该强迫一个类依赖于它不使用的接口。接口应该尽量小而专一,避免将多个不相关的功能放在同一个接口中
  5. 依赖倒置原则:高层模块不应该依赖于低层模块,,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象面向接口编程

设计模式的分类

根据它们的目的和适用场景,设计模式一般可以分为三大类:

创建型模式(Creational Patterns)

这些模式与对象的创建有关,它们试图以一种或另一种方式抽象化对象的创建过程,使得系统更加独立于如何创建、组合和表示这些对象。

  • 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。
  • 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,但由子类决定实例化哪一个类
  • 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
  • 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(如:Lombok中的@Builder)。
  • 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

结构型模式(Structural Patterns)

这些模式处理类或对象的组合。它们使用继承机制来组合接口或实现。

  • 适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期望的另一个接口。
  • 桥接模式(Bridge Pattern):将一个事物的抽象部分与它的实现部分分离开来,使它们都可以独立变化。
  • 组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构。
  • 装饰模式(Decorator Pattern):动态地给一个对象添加一些额外的职责。
  • 外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的界面。
  • 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象。
  • 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。

行为型模式(Behavioral Patterns)

这些模式特别关注对象之间的责任分配以及算法和对象之间通信的方式。

  • 责任链模式(Chain of Responsibility Pattern):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。
  • 命令模式(Command Pattern):将请求封装成对象,从而使你可以用不同的请求对客户进行参数化。
  • 解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
  • 迭代器模式(Iterator Pattern):提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露其内部的表示。
  • 中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互。
  • 备忘录模式(Memento Pattern):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
  • 观察者模式(Observer Pattern):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
  • 状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为。
  • 策略模式(Strategy Pattern):定义一系列算法,把它们一个个封装起来,并且使它们可以互相替换。
  • 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,而将一些步骤延迟到子类中。
  • 访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。

每种模式都有其特定的应用场景和优点,在实际开发中,选择合适的设计模式可以提高代码的可读性可维护性灵活性

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

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

相关文章

【AI学习】Transformer深入学习(二):从MHA、MQA、GQA到MLA

前面文章: 《Transformer深入学习(一):Sinusoidal位置编码的精妙》 一、MHA、MQA、GQA 为了降低KV cache,MQA、GQA作为MHA的变体,很容易理解。 多头注意力(MHA): 多头注…

【DevOps】Jenkins部署

Jenkins部署 文章目录 Jenkins部署资源列表基础环境一、部署Gilab1.1、安装Gitlab1.2、修改配置文件1.3、加载配置文件1.4、访问Gitlab1.5、修改root登录密码1.6、创建demo测试项目1.7、上传代码1.8、验证上传的代码 二、部署Jenkins所需软件2.1、部署JDK2.2、部署Tomcat2.3、部…

Node.js - 文件操作

1. 文件写入 文件写入是计算机非常常见的操作,下载文件,安装软件,保存程序日志,视频录制等都使用到了 1.1 异步写入 const fs require("fs");// 写入文件 fs.writeFile(./sentence.txt, "Hello world", e…

数据结构复习 (顺序查找,对半查找,斐波那契查找,插值查找,分块查找)

查找(检索): 定义:从给定的数据中找到对应的K 1,顺序查找: O(n)的从前向后的遍历 2,对半查找,要求有序 从中间开始查找,每次检查中间的是否正确,不正确就…

kafka使用以及基于zookeeper集群搭建集群环境

一、环境介绍 zookeeper下载地址:https://zookeeper.apache.org/releases.html kafka下载地址:https://kafka.apache.org/downloads 192.168.142.129 apache-zookeeper-3.8.4-bin.tar.gz kafka_2.13-3.6.0.tgz 192.168.142.130 apache-zookee…

Redis的内存预分配策略

Redis的内存预分配策略是一种优化手段,旨在减少频繁的内存分配和释放操作对性能的影响。以下是对Redis在使用各数据结构类型时内存变化以及触发底层数据结构变化条件的详细分析: 一、内存预分配策略概述 Redis通过预先分配足够的内存,可以提高…

卸载wps后word图标没有变成白纸恢复

这几天下载了个wps教育版,后头用完了删了 用习惯的2019图标 给兄弟我干没了??? 其他老哥说什么卸载关联重新下 ,而且还要什么撤销保存原来的备份什么,兄弟也是不得不怂了 后头就发现了这个半宝藏博主&…

麒麟服务器安装kafka--亲测

我这安装的是单机版本的: 下载地址:Index of /kafka/3.9.0 我下载的是:https://dlcdn.apache.org/zookeeper/zookeeper-3.9.3/apache-zookeeper-3.9.3-bin.tar.gz https://dlcdn.apache.org/kafka/3.9.0/kafka_2.12-3.9.0.tgz 一、下载并上…

104周六复盘 (188)UI

1、早上继续看二手书的一个章节,程序开发流程、引擎、AI等内容, 内容很浅,基本上没啥用,算是复习。 最大感触就是N年前看同类书的里程碑、AI相关章节时,会感觉跟自己没啥关系, 而如今则密切相关&#xf…

Chromebook 的 4 个最佳变声器

您对使用chromebook 变声器感到困惑吗?您是否认为在 Chromebook 上安装变声器很困难?如果是,那么这篇文章适合您,因为在 Chromebook 上安装和使用简单且准确的变声器非常简单且轻松。 在本文中,我们将分享适用于 Chro…

DC系列之DC-8渗透测试

DC-8 靶机渗透测试实战 靶机下载地址: https://download.vulnhub.com/dc/DC-8.zip(下载速度慢可以用迅雷下载) 一、实验环境 实验环境: kali2024:192.168.234.145(nat模式) 靶机环境DC-7&#…

12306分流抢票软件 bypass v1.16.43 绿色版(春节自动抢票工具)

软件介绍 12306Bypass分流抢票软件,易操作强大的12306抢票软件,全程自动抢票,云识别验证码打码,多线程秒单、稳定捡漏,支持抢候补票、抢到票自动付款,支持多天、多车次、多席别、多乘客、短信提醒等功能。…

NS4861 单灯指示独立耳锂电池充放电管理 IC

1 特性  最大 500mA 线性充电电流,外部可调节  内部预设 4.2V 充电浮充电压  支持 0V 电池充电激活  支持充满 / 再充功能  内置同步升压放电模块,输出电压 5.1V  同步升压 VOUT 最大输出电流 500mA  VOL/OR 独…

基于Java的敬老院管理系统的设计和实现【源码+文档+部署讲解】

基于Java的敬老院管理系统设计和实现 摘 要 新世纪以来,互联网与计算机技术的快速发展,我国也迈进网络化、集成化的信息大数据时代。对于大众而言,单机应用早已成为过去,传统模式早已满足不了当下办公生活等多种领域的需求,在一台电脑上不联网的软件少之又少&#x…

基于YOLOv8的道路缺陷检测系统

基于YOLOv8的道路缺陷检测系统 (价格80) 包含 [Block crack, Longitudinal crack, Strip repair, Transverse crack] [‘块状裂缝’,‘纵向裂缝’,‘修复’,‘横向裂缝’] 4个类 通过PYQT构建UI界面,包含图片检测&#xff…

我用AI学Android Jetpack Compose之开篇

最近突发奇想,想学一下Jetpack Compose,打算用Ai学,学最新的技术应该要到官网学,不过Compose已经出来一段时间了,Ai肯定学过了,用Ai来学,应该问题不大,学习过程记录下来,…

unity学习7:unity的3D项目的基本操作: 坐标系

目录 学习参考 1 unity的坐标系 1.1 左手坐标系 1.2 左手坐标系和右手坐标系的区别 1.3 坐标系的原点(0,0,0) 2 坐标系下的具体xyz坐标 2.1 position这里的具体xyz坐标值 2.2 父坐标 2.3 世界坐标和相对坐标 2.3.1 世界坐标 2.3.2 相对坐标 2.4 父物体,…

爬虫案例-爬取某度文档

文章目录 1、第三方库的安装和pytesseract安装2、爬取某度文档的代码3、效果图 1、第三方库的安装和pytesseract安装 #以下是安装http请求的第三方库 pip install requests #以下是安装处理文档的第三方库 pip install python-docx #以下是安装处理图片的第三方库 pip install…

在Lua中,Metatable元表如何操作?

Lua中的Metatable(元表)是一个强大的特性,它允许我们改变表(table)的行为。下面是对Lua中的Metatable元表的详细介绍,包括语法规则和示例。 1.Metatable介绍 Metatable是一个普通的Lua表,它用于…

【Ubuntu20.04】Apollo10.0 Docker容器部署+常见错误解决

官方参考文档【点击我】 Apollo 10.0 版本开始,支持本机和Docker容器两种部署方式。 如果您使用本机部署方式,建议使用x86_64架构的Ubuntu 22.04操作系统或者aarch64架构的Ubuntu 20.04操作系统。 如果您使用Docker容器部署方式,可以使用x…