前置知识储备

基本认知

什么是模式

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

什么是设计模式

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

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

  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)
一般来讲,实现关系是针对类与接口之间的关系而言的

空心三角形和虚线表示

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

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

相关文章

[笔试训练](十五)

目录 043:平方数 044:分组 045:拓扑排序 043:平方数 平方数 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 简单题&#xff0c;开根号之后判断左右两个数哪个离得近。 #include <iostream> #include <cmath> using namespace std; typedef long long…

电脑文件批量重命名不求人:快速操作,高效技巧让你轻松搞定

在数字化时代&#xff0c;电脑文件的管理与整理显得尤为重要。当面对大量需要重命名的文件时&#xff0c;一个个手动修改不仅耗时&#xff0c;还容易出错。那么&#xff0c;有没有一种方法可以快速、高效地完成这一任务呢&#xff1f;答案是肯定的&#xff0c;下面就来介绍几种…

温暖家居新风尚,能率壁挂炉——设计新风尚,体验再升级

随着家居品质要求的提升&#xff0c;现代人对家居的舒适性和设计感有了更高的追求。壁挂炉&#xff0c;作为现代家居中不可或缺的一部分&#xff0c;其重要性日益凸显。中国国际供热通风空调、卫浴及舒适家居系统展览会&#xff08;ISH China & CIHE&#xff09;将于2024年…

测评工作室的养号成本,效率,纯净度,便捷性等问题怎么解决?

大家好&#xff0c;我是南哥聊跨境&#xff0c;最近有很多做测评工作室的朋友找到南哥&#xff0c;问我有什么新的测评养号系统可以解决成本&#xff0c;效率&#xff0c;纯净度&#xff0c;便捷性等问题 测评养号系统从最早的模拟器、虚拟机到911、VPS、手机设备等&#xff0…

【深度学习实战(33)】训练之model.train()和model.eval()

一、model.train()&#xff0c;model.eval()作用&#xff1f; model.train() 和 model.eval() 是 PyTorch 中的两个方法&#xff0c;用于设置模型的训练模式和评估模式。 model.train() 方法将模型设置为训练模式。在训练模式下&#xff0c;模型会启用 dropout 和 batch norm…

|Python新手小白中级教程|第二十三章:列表拓展之——元组

文章目录 前言一、列表复习1.索引、切片2.列表操作字符3.数据结构实践——字典 二、探索元组1.使用索引、切片2.使用__add__((添加元素&#xff0c;添加元素))3.输出元组4.使用转化法删除元组指定元素5.for循环遍历元组 三、元组VS列表1.区别2.元组&#xff08;tuple&#xff0…

零门槛副业兼职!10种长期赚钱好方法!

想要实现财务自由&#xff0c;不能仅停留在梦想层面&#xff0c;更需要付诸实践。 以下是我从网络上精心整理的十大可靠的兼职副业建议&#xff0c;旨在助你一臂之力。 这些项目已根据推荐程度、难度水平、目标人群以及预期收入进行了细致分类。 我要强调的是&#xff0c;任…

Cosmo Bunny Girl

可爱的宇宙兔女郎的3D模型。用额外的骨骼装配到Humanoid上,Apple混合了形状。完全模块化,包括不带衣服的身体。 技术细节 内置,包括URP和HDRP PDF。还包括关于如何启用URP和HDRP的说明。 LOD 0:面:40076,tris 76694,verts 44783 装配了Humanoid。添加到Humanoid中的其他…

带EXCEL附件邮件发送相关代码

1.查看生成的邮件 2.1 非面向对象的方式&#xff08;demo直接copy即可&#xff09; ​ REPORT Z12. DATA: IT_DOCUMENT_DATA TYPE SODOCCHGI1,IT_CONTENT_TEXT TYPE STANDARD TABLE OF SOLISTI1 WITH HEADER LINE,IT_PACKING_LIST TYPE TABLE OF SOPCKLSTI1 WITH HEADER LIN…

AI编码工具-通义灵码初识

AI编码工具-通义灵码初识 通义灵码支持环境及语言代码安全性 通义灵码安装通义灵码登录 关于通义灵码的初识&#xff0c;还是得从2023云栖大会来说起。2023云栖大会带来了跨越式升级的千亿级参数规模大模型——通义千问2.0&#xff0c;随之而来的便有通义灵码&#xff0c;那么什…

SpringBoot项目配置HTTPS接口的安全访问

参考&#xff1a;https://blog.csdn.net/weixin_45355769/article/details/131727935 安装好openssl后&#xff0c; 创建 D:\certificate CA文件夹下包含&#xff1a; index.txt OpenSSL在创建自签证书时会向该文件里写下索引database.txt OpenSSL会模拟数据库将一些敏感信息…

嵌入式移植7Z解压缩(纯C)

本文分享一个纯C语言编写的7Z解压缩代码库&#xff0c;本代码库的主要目的是在嵌入式环境下使用7z解压缩文件&#xff0c;可以将升级包通过7z进行压缩&#xff0c;然后发送给设备&#xff0c;减小和设备传输过程中的文件大小&#xff0c;进而达到传输大文件的目的。 下载链接 …

2024年最佳音频处理软件盘点!助你事半功倍

在数字媒体时代&#xff0c;音频处理软件已经成为音乐制作、音频编辑和后期处理不可或缺的工具。这些软件具备强大的功能&#xff0c;能帮助用户轻松实现声音的剪辑、混音、特效处理以及音频格式转换等操作。本文将为你介绍音频处理软件的基本概念、功能特点以及常用软件&#…

【@ohos.events.emitter (Emitter)】

ohos.events.emitter (Emitter) 本模块提供了在同一进程不同线程间&#xff0c;或同一进程同一线程内&#xff0c;发送和处理事件的能力&#xff0c;包括持续订阅事件、单次订阅事件、取消订阅事件&#xff0c;以及发送事件到事件队列的能力。 说明&#xff1a; 本模块首批接…

实时Linux对EtherCAT工业自动化协议的支持

在自动化技术和工业控制领域&#xff0c;实时通信网络的重要性不断增长。EtherCAT&#xff08;Ethernet for Control Automation Technology&#xff09;作为一种高效的工业以太网通信协议&#xff0c;因其出色的性能和灵活性而广受欢迎。而实时Linux作为影响最为广泛的开源实时…

【Web前端】盒子模型_元素分类_表格

1、盒子模型 1.1简介 CSS盒子模型是在网页设计中经常用到的CSS技术所使用的一种思维模型。包括内容(content)、内边距(padding)、边框(border)、外边距(margin) 1.2边框&#xff08;border&#xff09; 1.2.1简介 边框是环绕内容区和填充的边界。边框的属性有border-style、…

Pytorch 实现情感分析

情感分析 情感分析是 NLP 一种应用场景&#xff0c;模型判断输入语句是积极的还是消极的&#xff0c;实际应用适用于评论、客服等多场景。情感分析通过 transformer 架构中的 encoder 层再加上情感分类层进行实现。 安装依赖 需要安装 Poytorch NLP 相关依赖 pip install t…

免费SSL证书?轻松申请攻略来了!

在当今的互联网时代&#xff0c;网络安全已经成为一个不容忽视的重要课题。随着在线交流和交易活动的增加&#xff0c;保护网站和用户信息的重要性日益突显。SSL证书&#xff0c;即安全套接字层证书&#xff0c;它为互联网通信提供了加密服务&#xff0c;确保数据的安全性和完整…

光伏远动通讯屏的组成

光伏远动通讯屏的组成 远动通讯屏主要用于电力系统数据采集与转发&#xff0c;远动通讯屏能够采集站内的各种数据&#xff0c;如模拟量、开关量和数字量等&#xff0c;并通过远动通讯规约将必要的数据上传至集控站或调度系统。这包括但不限于主变和输电线路的功率、电流、电压等…

怎么设置一天多个时间点的闹钟提醒?

在日常生活中&#xff0c;我们经常需要在一天的不同时间点完成特定的任务&#xff0c;如定时喝水、定时查看后台数据、定时吃药等。这时候&#xff0c;如果能有一款软件&#xff0c;可以在一条日程里轻松设置多个时间点的闹钟提醒&#xff0c;那将大大提高我们的工作效率和生活…