前置知识储备

Lightmass分析(二) 前置知识储备 分析 Lightmass 之前你需要知道的事 阅读详情

基本认知

什么是模式

在一定环境中解决一些问题的方案(通俗来说:特定环境中用固定的套路解决问题)

什么是设计模式

设计模式是一套反复被人使用,多数人知晓的,经过分类编目的代码设计经验的总结

设计模式最终的目的是为了应对变化,提高代码的复用性

  1. 客户需求的变化

  2. 技术平台的变化

  3. 开发团队的变化

  4. 市场需求的变化

    …

设计模式分类

创建型模式

通常和对象创建有关,涉及到对象实例化的方式(5种)

  • 工厂模式
  • 抽象工厂模式
  • 建造者模式
  • 原型模式
  • 单例模式

结构型模式

描述的是如何组合类和对象获得更大的结构(7种)

  • 代理模式
  • 装饰者模式
  • 适配器模式
  • 桥接模式
  • 组合模式
  • 外观模式
  • 享元模式

行为型模式

描述类和对象的交互以及分配职责(11种)

  • 模板方法模式
  • 命令模式
  • 责任链模式
  • 策略模式
  • 中介者模式
  • 观察者模式
  • 备忘录模式
  • 访问者模式
  • 状态模式
  • 解释器模式
  • 迭代器模式

面向对象的设计原则

依赖倒置原则 (DIP)

DIP:Dependence Inversion Principle

  • 高层(稳定)不依赖底层(变化),两者依赖抽象(稳定)
  • 抽象(稳定)不依赖细节(变化),细节依赖抽象(稳定)

开放封闭原则 (OCP)

OCP:Open For Extension, Closed For Modification Principle

  • 对扩展开放,对更改封闭
  • 类模块可扩展,但不可修改

单一职责原则 (SRP)

SRP:Single Responsibility Principle

  • 一个类应该仅有一个引起它变化的原因
  • 变化的方向隐含类的责任

里氏替换原则 (LSP)

LSP:Liskov Subsitution Principle

  • 子类必须能够替换它们的基类(尽量少多态)
  • 继承表达类型抽象

接口隔离原则 (ISP)

ISP:Interface Segregation Principle

  • 不应该强迫客户程序依赖他们不用的方法(如果某个功能或方法不是必需的,那么依赖于它只会增加不必要的复杂性和耦合度;同时,只需要暴露必要的接口和方法,隐藏不必要的内部细节)
  • 接口应该小而完备(一个设计良好的接口应该只包含客户程序所需的方法)
  • 一个接口应该只提供一种对外功能

优先组合不是继承原则 (CARP)

CARP:Composite/Aggregate Reuse Principle

  • 类的继承通常是"白箱复用",对象组合通常是"黑箱复用"
  • 继承在一定程度上破坏封装性,子类和父类耦合度高(尽量少继承)

迪米特法则 (LOD)

LOD:Law of Demeter

  • 对象应当对其他对象尽可能少的了解(宁可通过 A ⇔ B ⇔ C,也不要直接 A ⇔ C)
  • 各个模块之间相互调用时,通常会提供一个统一的接口来实现

类图

基本认识

  • 类图显示了模型的静态结构,特别是模型中存在的类、类内部结构以及它们与其他类的关系
  • 类图不显示暂时性的信息
  • 类图是面向对象建模的主要组成部分
  • 它既用于应用程序的系统分类的一般概念建模,也用于详细建模,将模型转换为编程代码

类图作用

描述类本身结构以及类与类之间一些关系

类图的元素

在类图中一共包含了以下几种模型元素,分别是:类(Class)、接口(Interface)、依赖关系(Dependecy)、泛化关系(Generalization)、关联关系(Association)、聚合关系(Aggregation)、组合关系(Composition)和实现关系(Realization)

类图中元素的组成

C++ 中一个类的类图组成如下:

在这里插入图片描述

+: 公有属性
-: 私有属性
#: 保护属性

name: string	成员名: 类型
eat(): void		成员函数: 返回值类型

斜体: 抽象类或者纯虚函数

类中类图的关系

  • 依赖关系(Dependency)
依赖关系是指:两个或多个类之间依存关系,如植物类依赖于土壤类。

依赖关系还可以再细分为5种类型,分别是

- 绑定依赖(Binding)
- 实现依赖(Realization)
- 使用依赖(Usage)
- 抽象依赖(Abstraction)
- 授权依赖(Permission)
    
依赖关系用虚线箭头来表示,箭头指向为依赖的方向
  • 泛化关系(Generalization)
简单的讲就是类之间的继承关系

用空心三角形和实线来表示,箭头指向为父类
  • 关联关系(Association)
关联关系是类之间一种相互影响的关系,影响的方向就是关联的方向

用实线箭头表示
  • 聚合关系(Aggregation)
聚合关系是类之间的一种较弱的耦合关系,如一个字符串数组和一个字符串就是一种聚合关系

用空心的菱形和实线箭头来表示,箭头方向为被聚合的类
  • 组合关系(Composition)
组合关系是类之间一种整体与部分之间的关系,如一只青蛙有四条腿,青蛙类与青蛙腿类之间的关系就是组合关系

实心的菱形和实线箭头来表示,箭头指向为被组合的类
  • 实现关系(Realization)
一般来讲,实现关系是针对类与接口之间的关系而言的

空心三角形和虚线表示
第2期| 零基础前置储备!学AI遥感解译必须会的基础知识 本专栏聚焦AI智能遥感解译落地实战,从零基础基础知识、数据预处理、模型原理到全场景项目实战,系统讲解当下最主流的AI遥感解译技术。摒弃晦涩公式、纯理论空谈,全程以「能看懂、能复现、能落地」为核心,适配遥感科研、毕业设计、竞赛获奖、工程落地等全场景需求,帮你快速从传统目视解译,进阶为AI自动化遥感解译高手。 适合人群:遥感、GIS、测绘、生态、地质、城乡规划相关专业学生及行业技术从业者。 阅读详情

相关推荐

vue3结合element-plus之如何优雅的使用表单组件

在日常开发中,我们会经常使用 element-ui 或者是 antdesign 或者是 element-plus 等组件库实现搜索功能。下面就以 element-plus 为例,我们实现一个搜索功能的组件,并且随着屏幕尺寸的变化,其布局也会跟随变化。这里就没有对布局进行过多的美化,旨在实现其功能。这里就需要用到相关表单组件。对vue相关知识熟悉。

小白小白从不日别的博客 494

React 前置知识储备 笔记

参考b站 李立超老师的视频

sako_77的博客 667

用Typora画流程图和序列图:Mermaid语法实战教程(含常见报错解决)

本文是一份详细的Typora与Mermaid语法实战教程,教你如何在Markdown文档中高效绘制流程图和序列图。文章涵盖从环境配置、核心语法到复杂图表构建的全过程,并重点解析了常见报错原因与解决方案,助你将可视化图表无缝融入文档工作流。

weixin_29279101的博客 298

成为优秀的TS体操高手 之 TS 类型体操前置知识储备

TS 类型体操前置知识储备如果你正在学习 TS,可是像我一样仅仅停留在定义类型,定义interface/type的层面的话, 这份体操类型练习题一定不要错过 !type-challenges写这篇文章的时候我只做完了体操类型的中等级别的题目(还有 2-3 道其实没完全解出来)更多面试题库看前端面试题题库简单搭建一下做题环境我喜欢做一题拷贝一题,所以我 clone 了......

web全栈开发的博客 2207

模型参考自适应控制(MRAC):让PID参数动态优化

本文深入解析模型参考自适应控制(MRAC)技术,它通过实时调整PID参数,使控制系统能自动适应系统特性变化和外部干扰。文章详细介绍了MRAC的工作原理、数学基础,并提供了用C语言实现的实战代码示例,帮助工程师解决传统PID控制在非线性、时变系统中参数整定繁琐的难题。

tequila的博客 902

SAP 财务接口开发:完全清账 vs 标准过账的 CO-PA(获利能力字段) 赋值全解析(含设计哲学)

用于完全清账场景:用于标准凭证过账/部分清账两者对 CO-PA 数据的传递方式截然不同。本文不仅提供完整的代码实现,更深入解析为什么 SAP 要这样设计——了解设计哲学,才能灵活应对各类需求。完全清账→ 调用,必须在T_FTPOST中传递,其他特征用BSEG-RKE_前缀。标准过账/部分清账→ 调用,在CRITERIA表中传递特征,字段名直接用WERKSARTNR等。SAP 的设计智慧面向不同场景,采用不同机制,各司其职。通过接口抽象,将复杂的 CO-PA 配置逻辑封装在内部,对外提供简洁的调用方式。

Pegasus666的博客 327

Linux6.0、IO基础前置储备知识

IO基础前置知识,以及对曾经在程序层面底上理解的文件作系统层面上的理解

m0_74824254的博客 948

从虚拟机到双系统:手把手教你为Gromacs搭建最强Linux环境(含WSL2、Ubuntu22.04配置)

本文详细指导如何在Windows系统下为Gromacs分子动力学模拟搭建高性能Linux环境,涵盖WSL2和Ubuntu22.04双系统配置。通过对比虚拟机、WSL2和原生Linux的性能数据,提供GPU加速、内存优化等实用技巧,帮助科研人员提升计算效率。

weixin_30861797的博客 269

2024年前端最新成为优秀的TS体操高手 之 TS 类型体操前置知识储备_ts类型体操,面试总结报告怎么写

中年危机是真实存在的,即便有技术傍身,还是难免对自己的生存能力产生质疑和焦虑,这些年职业发展,一直在寻求消除焦虑的依靠。技术要深入到什么程度?做久了技术总要转型管理?我能做什么,我想做什么?一技之长,就是深耕你的专业技能,你的专业技术。(重点)独立做事,当你的一技之长达到一定深度的时候,需要开始思考如何独立做事。(创业)拥有事业,选择一份使命,带领团队实现它。(创业)一技之长分五个层次栈内技术 - 是指你的前端专业领域技术栈外技术 - 是指栈内技术的上下游,领域外的相关专业知识。

2401_84620191的博客 1203

第67步 时间序列建模实战:ARIMA建模(Stata)

第67步 时间序列建模实战:ARIMA建模(Stata)

Jet4505的博客 6819

YOLOv11 环境配置全流程 | 从零开始搭建训练与推理环境

YOLOv11环境配置与训练全流程指南 本文详细介绍了YOLOv11目标检测模型的环境配置、训练与推理全流程。内容包括: 环境要求:列出GPU、CUDA、Python等组件的版本要求,提供快速检查脚本 Windows配置: CUDA 12.6和cuDNN 8.9.7安装步骤 使用Conda创建隔离环境 PyTorch GPU版本安装方法 IDE环境配置 Linux配置:提供Ubuntu 22.04下的CUDA、cuDNN安装命令和Conda环境搭建 Docker方案:提供一键式容器化部署命令 训练实战: 数

shrgegrb的博客 2015

思维三段式

现在AI科技日益发达,有什么问题可以很直接的问AI得出答案,但是很多问题的答案可能因为你缺少某些前置知识导致你看不懂。因此突发奇想,试着罗列一个思维三段式用于AI的提问和知识的学习。核心问题以及自我知识储备分析子问题以及相应的AI回答人工的自我总结这部分比较重要,言简意赅的阐明核心问题以及相关的核心答案,并给出一些思考的头绪,不能理解的去回顾第二部分学习前置知识。由于是后期处理,根据人阅读的习惯,可以在第一部分问题后面放置一次问题的自我总结,再在文章的结尾放置一份。这样就不用来回翻了。

shinedown01的博客 263

使用verilog实现基于FPGA的TDC设计

verilog实现TDC 高精度时间数字转换器概述(TDC) 简介: TDC被用于测量时间间隔,应用在物理研究、飞行时间测量领域等。 本设计使用verilog实现并在xilinx和altera的FPGA上均可实现! 设计中使用到下述几个模块,包括FIFO,COUNT等,在xilinx下也使用到了一些原语等。下面有实现的代码和仿真截图等。 顶层模块设计如下: module top( input wire start, input wire stop, input wire clk, output wire T

QQ_778132974的博客 6253

【仿Mudou库one thread per loop式并发服务器实现】项目介绍+前置技术知识点

仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器这个项目是通过咱们实现的高并发服务器组件,可以简洁快速的完成一个高性能的服务器搭建。并且,通过组件内提供的不同应用层协议支持,也可以快速完成一个高性能应用服务器的搭建。在这里,要明确的是咱们要实现的是一个高并发服务器组件,因此当前的项目中并不包含实际的业务内容。

fight_p的博客 2903

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

GPU多机多卡-公司项目5万张PCB图片训练总结

1、前置知识了解: 添加链接描述

Leagues的博客 265

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

走出测试,走向CEO

飞测说:大家好,我们又见面了,我是黑夜小怪。不巧,今晚加班回来路上,湿身了,淋了个落汤鸡,不过明天也许可以看海了,也就呵呵了,原本想回来后聊些技术的,现在突然想先聊聊我的一些想法,仅供交流。 走出测试 俗话说,知己知彼,方能百战不殆,我们身为测试,处于项目中下游,经常听到测试A抱怨产品需求文档不清晰,测试B埋怨苦逼的程序猿质量不高,听多了,耳朵都磨出茧子了,我觉得我们应该主...

dianshabeng2169的博客 102

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Next知识框架详解

Next.js 凭借其全栈能力、灵活的渲染策略和强大的工具链,成为构建高性能 Web 应用的首选框架。开发者可通过合理选择渲染模式、优化数据流和利用生态系统工具,快速实现从原型到生产级的项目开发。其持续迭代(如 Next.js 14 的 Turbopack 优化)和活跃社区支持,进一步巩固了其在现代 Web 开发中的地位。

警警的博客 2428

Python爬虫抓取纯静态网站及其资源_python下载所有js css img

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。爬虫,按照我的理解,其实是一段自动执行的计算机程序,在web领域中,它存在的前提是模拟用户在浏览器中的行为。这个办法是我当时能想到的最好办法了。

m0_60607245的博客 976

OpenGL C++视频中添加图片及文字水印播放并录制

根据前置储备,该功能的实现流程: 创建一个GLThread的OpenGL运行环境; YUV数据绘制到OpenGL纹理中; 图片纹理创建绘制到glViewport; 文字渲染绘制到glViewport; 录制视频的surface并根据此切换GLContext上下文交换(swapBuffer)渲染与显示的视频数据 ; MediaCodec获取出encodeData写入MediaMuxer成为MP4文件格式的视频

wangyongyao1989的博客 1647

如何阅读、学习 Git 核心源代码 ?

学习 Git 核心源代码 方法论

belldeep的专栏 1401

【Deepseek生成】如何快速入门Java源代码审计

快速入门Java代码审计的路径、推荐书籍及练习项目。

tpriwwq的专栏 1698
上一篇: lambda、auto
下一篇: 创建型模式
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值