设计模式——设计模式介绍

设计模式

设计模式介绍

设计模式:

  • 系统服务设计中针对场景的一种解决方案,可以解决功能逻辑开发中的共性问题,并非所有问题
  • 一种开发思想,每个设计模式都有解决某一类问题的概念模型,不要拘束于一种的固定的代码格式,要根据具体场景做出变化
  • 同一种设计模式,不同场景,不同代码实现方式,以及不同开发人员去实现,都会有不同的代码方案
  • 高内聚、低耦合和可复用的特点
  • 在组件中使用比较频繁,比如:RPC框架,引擎的决策树等
  • 主要通过实际案例来理解学习,不要只通过硬背概念,这样实际应用中存在问题

设计模式的类型:

创建型模式:
工厂方法模式(Factory Method Pattern)定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法模式使一个类的实例化延迟到其子类
抽象工厂模式(Abstract Factory Pattern)提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类
生成器模式(Builder Pattern)将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示
原型模式(Prototype Pattern)用于创建重复的对象,同时又能保证性能。通过复制现有对象的实例来生成新对象
单例模式(Singleton Pattern)确保一个类只有一个实例,并提供一个全局访问点
结构型模式:
适配器模式(Adapter Pattern)将一个类的接口转换成客户端期望的另一个接口。适配器模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作
代理模式(Proxy Pattern)为其他对象提供一种代理以控制对这个对象的访问。代理模式常用于实现延迟加载、权限控制等功能
桥接模式(Bridge Pattern)将抽象部分与它的实现部分分离,使它们可以独立变化。桥接模式主要用于处理多维度变化的场景
组合模式(Composite Pattern)将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性
装饰器模式(Decorator Pattern)动态地给一个对象添加一些额外的职责,装饰模式相比生成子类更灵活。它是继承关系的一个替代方案
外观模式(Facade Pattern)提供一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,使子系统更易于使用
享元模式(Flyweight Pattern)通过共享技术来有效地支持大量细粒度对象的复用,以减少内存使用和提高性能
行为模式:
责任链模式(Chain of Responsibility Pattern)为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止
命令模式(Command Pattern)将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作
迭代器模式(Iterator Pattern)提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露其内部表示。迭代器模式可以有效地遍历集合对象而无需暴露其内部结构
中介者模式(Mediator Pattern)用于减少对象之间的直接交互,而是通过一个中介对象来协调对象之间的交互
备忘录模式(Memento Pattern)在不破坏封装性的前提下捕获和恢复对象的内部状态。备忘录模式通常用于需要实现撤销操作或者历史记录功能的场景,它允许我们保存对象的状态,并在需要时将其恢复到之前的状态
观察者模式(Observer Pattern)定义对象间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都会得到通知并自动更新
状态模式(State Pattern)允许对象在内部状态改变时改变它的行为,对象看起来似乎修改了它的类
策略模式(Strategy Pattern)定义一系列算法,将每一个算法封装起来,并且使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户
模板方法模式(Template Method Pattern)定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
访问者模式(Visitor Pattern)封装作用于某数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新操作
实际开发中用到较多的模式:
  • 工厂方法模式
  • 抽象工厂模式
  • 单例模式
  • 适配器模式
  • 组合模式
  • 代理模式
  • 迭代器模式
  • 策略模式
  • 模板模式

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

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

相关文章

MySQL数据库笔记(二)

第一章 单行函数 1.1 什么是函数 函数的作用是把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率,又提高了可维护性。在SQL中使用函数,极大地提高了用户对数据库的管理效率。 1.2 定义 操作数据对象。 接受参数返回一个结果。 只对一行进行…

探索计算机视觉(人工智能重要分支)的发展与应用

引言 在当今快速发展的科技时代,计算机视觉作为人工智能领域的重要分支,正日益成为各行各业不可或缺的关键技术。从简单的图像处理到复杂的智能系统,计算机视觉的发展不仅改变了我们看待世界的方式,也深刻影响着工业、医疗、交通等…

不同交换机之间相同VLAN间主机通信

1、搭建网络拓扑 搭建拓扑,分配IP地址,划分vlan,分配端口 2、配置交换机 //进入全局配置模式 Switch>enable Switch#config terminal Enter configuration commands, one per line. End with CNTL/Z. Switch(config)#hostname SW1 …

如何级联移位寄存器(74HC595)

在这个项目中,我们将使用 74HC595 移位寄存器将 2 个移位寄存器级联在一起。这样级联移位寄存器现在可以控制 16 个输出。 当然您可以级联任意数量的移位寄存器。如果您要级联第三个移位寄存器,它可以控制 24 个输出。如果您级联第四个移位寄存器&#x…

Rxjava2最全面的解析

说到区别,可能有的小伙伴会问,我没看过rxjava1。可以直接看rxjava2么。个人觉得不必要,因为 rxjava2.x 是按照 Reactive-Streams specification 规范完全的重写的,完全独立于 rxjava1.x 而存在,它改变了以往 rxjava1的…

1999-2022年 297个地级市-医院卫生院数量及床位数量(数据收集)

全国297个地级市的医院卫生院数量的稳步增长是医疗事业发展的一个重要标志。政府的持续投入和对医疗设施的改善,不仅提升了医疗服务的硬件水平,也通过引进和培养医疗人才、优化服务流程,提高了医疗服务的整体质量。这些举措极大地增强了人民群…

WordPress项目教程:自动采集并发布,让你轻松实现网站内容更新

随着互联网的发展,越来越多的人开始关注自己的个人网站,通过网站展示自己的才华、分享知识、推广产品等。然而,个人网站的运营并非易事,尤其是内容更新方面。为了解决这个问题,今天我们将为大家推荐一款WordPress插件主…

测试辅助工具(抓包工具)的使用3 之 弱网测试

1.为什么要进行弱网测试? 1.带宽1M和带宽100M打开tpshop网站效果一样吗? 2.手机使用2G网络和使用3G网络打开京东的效果一样吗? 弱网环境下,出现丢包、延时软件的处理机制,避免造成用户的流失。 2.如何进行弱网测试&…

记一道MO数学练习题

手玩发现, 要么是行共线, 也就是说(1,1)填1之后,(1,4)要填1,(1,7)要填1, 事实上,可以给(1,x)&a…

YOLOv10目标检测算法的使用

目录 一、环境安装 1、创建虚拟环境 2、安装依赖 二、数据集准备 1、预训练权重 2、数据划分 3、建立数据集的yaml文件 三、训练 1、终端运行指令 2、建立一个 python 文件运行 四、验证 1、终端运行指令 2、建立一个 python 文件运行 五、模型推理 1、单张图片推…

AtCoder Beginner Contest 359(ABCDEFG题)视频讲解

A - Count Takahashi Problem Statement You are given N N N strings. The i i i-th string S i S_i Si​ ( 1 ≤ i ≤ N ) (1 \leq i \leq N) (1≤i≤N) is either Takahashi or Aoki. How many i i i are there such that S i S_i Si​ is equal to Takahashi? C…

基于IDEA的Maven(坐标信息介绍和编写)

这篇博客来学习和分析一下: " pom.xml " 所生成的最基本的信息。 之前的博客中讲到,学 Maven 就是学 " pom.xml " 的配置。后面也会围绕这个文件进行学习。 目录 一、分析 pom.xml 文件 (1)分析的 "p…

YOLOv9基础 | 实时目标检测新SOTA,手把手带你深度解析yolov9论文!

前言:Hello大家好,我是小哥谈。YOLOv9是Chien-Yao Wang等人提出的YOLO系列的最新版本之一(截止到目前,YOLOv10已发布),于2024年2月21日发布。它是 YOLOv7的改进版本,两者均由Chien-Yao Wang及其同事开发。本节课就以YOLOv9论文为基础带大家深入解析YOLOv9算法。🌈 …

React+TS前台项目实战(十五)-- 全局常用组件Table封装

文章目录 前言Table组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 在这篇文章中,我们将对本系列项目中常用的表格组件Table进行自定义封装,以提高性能并适应项目需求。后期也可进行修改和扩展,以满足项目的需求。 Table组…

html--404页面

<!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"> <title>404 错误页面不存在&…

【Linux】进程间通信3——线程安全

1.Linux线程互斥 1.1.进程线程间的互斥相关背景概念 临界资源&#xff1a; 多线程执行流共享的资源叫做临界资源。临界区&#xff1a; 每个线程内部&#xff0c;访问临界资源的代码&#xff0c;就叫做临界区。互斥&#xff1a; 任何时刻&#xff0c;互斥保证有且只有一个执行…

一年前 LLM AGI 碎片化思考与回顾系列⑦ · 在SystemⅡ未知之境之中徘徊

阅读提示&#xff1a; 本篇系列内容的是建立于自己过去一年在以LLM为代表的AIGC快速发展浪潮中结合学术界与产业界创新与进展的一些碎片化思考并记录最终沉淀完成&#xff0c;在内容上&#xff0c;与不久前刚刚完稿的那篇10万字文章「融合RL与LLM思想&#xff0c;探寻世界模型以…

乾坤微服务的使用

前言&#xff1a; 在这里整理下用乾坤来开发微服务的一些资料。 使用好处&#xff1a; 使用乾坤可以实现什么效果呢&#xff1f;众所周知&#xff0c;前端的框架五花八门&#xff0c;react/vue/angular等各领风骚&#xff0c;那么如果我们有需要把不同技术栈的项目整合起来&…

UFS Power Mode Change 介绍

一. UFS Power Mode Change简介 1.UFS Power Mode指的是Unipro层的Power State, 也可以称为链路(Link)上的Power Mode, 可以通过配置Unipro Attribute, 然后控制切换Unipro Power State, 当前Power Mode Change有两种触发方式&#xff1a; (1) 通过DME Power Mode Change触发…

Tortoise 删除文件

1、右击需要删除的文件&#xff0c;选择Delete 2、提交