当前位置: 首页 > news >正文

软件设计模式

1.UML

1.1类图表示法

uml类图中,类使用包含类名、属性、方法

属性或方法前的加好和减号表示了这个方法的可见性,可见性的符号有三种:

+表示public

-表示private

#表示protected

1.2 类与类之间关系

关联关系

 单向关联

双向关系

自关联

聚合关系

聚合关系是关联关系的一种,是强关联关系,是整体和部分的关系

聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,成员对象可以脱离整体对象独立存在。带空心菱形的实线来表示

组合关系

组合关系表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系

组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在了,部分对象也将不存在,部分对象不能脱离整体对象存在,用带实心菱形的实线来实现

依赖关系

依赖关系是一种使用关系,是对象之间耦合度最弱的一种关联关系,是临时性的关联,在代码中,某个类的方法,通过局部变量、方法的参数或静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责;依赖关系用带箭头的虚线表示,箭头指向被依赖的类

继承关系

是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系;使用空心三角箭头实线表示,箭头从子类指向父类

实现关系

是接口与实现类之间的关系,类中的操作实线了接口中所声明的所有的抽象操作;实现关系用带空心三角箭头虚线来表示,箭头从实现类指向接口

2.软件设计原则

在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性

开闭原则

对扩展开发,对修改关闭

要想达到这样的效果,需要使用接口和抽象类

里式代换原则

里式代换原则:任何基类可以出现的地方,子类一定可以出现。通俗理解为:子类可以扩展父类的功能,但不能改变父类原有的功能。换句话,子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法

依赖倒转原则

高层模块不应该依赖底层模块,两者都应该依赖其抽象

抽象不应该依赖细节,细节应该依赖抽象

简单的说就是要求对抽象进行编程,不要对实现进行编程,这样降低了客户与实现模块间的耦合

3.创建型模式

用于描述"怎样创建对象",主要特点“将对象的创建与使用分离”

提供了单例、原型、工厂方法、抽象工厂、建造者

4.结构型模式

结构型模式描述如何将类或对象按某种布局组成更大的结构,分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者采用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足"合成复用原则",所以对象结构模式比类结构模式具有更大的灵活性。

结构型模式7种:代理模式、适配器模式、装饰着模式、桥接模式、外观模式、组合模式、享元模式

4.1 代理模式

由于某些原因需要给某对象提供一个代理以控制对该对象的访问,这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。java中的代理按照代理了生成时机不同分为静态代理和动态代理。静态代理在编译器就生成,动态代理在java运行时动态生成。动态代理又有jdk代理和cglib代理。

5.行为模式

用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务

行为型模式

相关文章:

软件设计模式

1.UML 1.1类图表示法 uml类图中,类使用包含类名、属性、方法 属性或方法前的加好和减号表示了这个方法的可见性,可见性的符号有三种: 表示public -表示private #表示protected 1.2 类与类之间关系 关联关系 单向关联 双向关系 自关联 聚合关…...

Git常见场景命令总结

1、查看远程仓库标签/分支 git ls-remote --tags origin git ls-remote --heads origin2、删除远程仓库标签/分支 git push origin --delete refs/tags/my_tag3、删除本地标签/分支 git branch -d <branch_name>4、修改代码但未add回滚 git checkout -- <file1>…...

面向对象的分析与设计(精品课程)第一章作业

面向对象的分析与设计&#xff08;精品课程&#xff09;第一章作业 一. 单选题&#xff08;共2题&#xff0c;18分&#xff09;二. 多选题&#xff08;共3题&#xff0c;27分&#xff09;三. 填空题&#xff08;共5题&#xff0c;45分&#xff09;四. 简答题&#xff08;共1题&…...

要使用API接口获取淘宝电商平台的数据,您需要遵循以下步骤:

了解API文档和规范&#xff1a;首先&#xff0c;您需要了解淘宝电商平台的API文档和规范&#xff0c;以确定可用的接口和参数。您可以在淘宝开放平台的官方文档中找到这些信息。注册并获取API密钥&#xff1a;在使用API之前&#xff0c;您需要在淘宝开放平台注册并获取API密钥。…...

vue中动态style(如何动态修改伪元素样式)

vue中动态style(如何动态修改伪元素样式)_vue怎么在行内给伪元素加样式_爱上星星的鲸鱼的博客-CSDN博客...

碳当量及相关指数

声明 本文是学习GB-T 713.1-2023 承压设备用钢板和钢带 第1部分&#xff1a;一般要求. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了承压设备用钢板和钢带的牌号表示方法、订货内容、尺寸、外形、重量、技术要求、检验 规则、…...

MySQL数据库入门到精通

介绍 终于将黑马程序员 MySQL数据库入门到精通&#xff0c;从mysql安装到mysql高级、mysql优化全囊括这个视频看完了&#xff0c;发现自己之前掌握的数据库知识只能算是个入门&#xff0c;现在将这个视频的笔记整理一下&#xff0c;方便复习。准备按基础篇&#xff0c;进阶篇&…...

【TA】OP-TEE demo学习

前言&#xff1a;工作原因接触Apple软件需要搭建TA环境&#xff0c;涉及到OP-TEE&#xff0c;学习一下 OP-TEE&#xff08;Open Portable Trusted Execution Environment&#xff09;是一个开放源代码的可信执行环境&#xff08;TEE&#xff09;软件框架。它提供了安全的执行环…...

什么是实时操作系统(UCOS简介)

uC/OS-III官网&#xff1a;Home Page - Weston Embedded Solutions 一、裸机与RTOS介绍 下面我将从不同方面阐述裸机与试试操作系统的区别&#xff0c;从而进一步介绍裸机和实时操作系统 定义&#xff1a; 裸机&#xff1a;裸机指的是没有任何操作系统或软件层的硬件系统。在…...

软考-操作系统

/4操作系统的作用 进程 进程的概念 进程是程序的一次执行过程&#xff0c;没有程序就没有进程 进程可有多个线程&#xff0c;线程可共享资源 进程的两个基本属性&#xff1a; 可拥有资源的独立单位可独立调度和分配资源的基本单位 线程可共享&#xff1a; 内存地址空间代码…...

【EasyExcel】excel表格的导入和导出

【EasyExcel】excel表格的导入和导出 【一】EasyExcel简介【二】EasyExcel使用【1】EasyExcel相关依赖【2】写Excel&#xff08;1&#xff09;最简单的写(方式一)&#xff08;2&#xff09;最简单的写(方式二)&#xff08;3&#xff09;排除模型中的属性字段&#xff08;4&…...

Unity shader内置standard代码解析

最近有相关需求制作&#xff0c;所以这里编写一个文档&#xff0c;方便后续的流程查看。 下载源码 由于unity内置的shader是无法查看源码的&#xff0c;你需要去官网下载对应版本内置源码查看 在引擎下载那里&#xff0c;会有一个Built in Shaders&#xff0c;下载 打开以后…...

Redis 有序集合操作实战(全)

目录 ZADD 加入有序集 ZCARD 取成员数量 ZCOUNT 计算区间成员数量 ZINCRBY 运算 ZRANGE 取区间成员(升序) ZRANGEBYSCORE 按分值排序取成员 ZRANK 取成员排名 ZREM 移除成员 ZREMRANGEBYRANK 按位置区间批量移除 ZREMRANGEBYSCORE 按分值区间移除 ZREVRANGE 取区间成…...

化工DCS/SIS/MIS系统时钟同步(NTP服务器)建设

化工DCS/SIS/MIS系统时钟同步&#xff08;NTP服务器&#xff09;建设 化工DCS/SIS/MIS系统时钟同步&#xff08;NTP服务器&#xff09;建设 目前计算机网络中各主机和服务器等网络设备的时间基本处于无序的状态。 随着计算机网络应用的不断涌现&#xff0c;计算机的时间同步问…...

计算机网络工程师多选题系列——操作系统

得多选者得天下啊同志们&#xff01; 摘录按照章节顺序&#xff0c;但事实上各章节习题有交叉。 1 操作系统 1.1 操作系统概论 操作系统的主要功能&#xff1a;进程管理、存储管理、文件管理、设备管理和用户接口。 操作系统的主要功能——设备管理&#xff1a;为用户程序提…...

matlab读写json文件

Background 通常&#xff0c;在matlab中使用mat文件进行数据存储。MAT文件是MATLAB中用来存储数据的二进制文件格式。MAT文件可以包含各种数据类型&#xff0c;包括数字、矩阵、向量、结构体、字符和函数等。但是&#xff0c;当和其他语言有交互时&#xff0c;mat文件会不太方便…...

数据治理-数据仓库环境

数据仓库环境包括一系列组织起来以满足企业需求的架构组件&#xff0c;从源系统流动到数据暂存区&#xff0c;数据可以在这里被清晰&#xff0c;当数据集成并存储在数据仓库或操作数据存储中时&#xff0c;可以对其进行补充丰富。在数据仓库中&#xff0c;可以通过数据集市或数…...

DevOps与CI/CD常见面试问题汇总

01 您能告诉我们DevOps和Agile(敏捷)之间的根本区别吗&#xff1f; 答&#xff1a;尽管DevOps与敏捷方法&#xff08;这是最流行的SDLC[Software Development Life Cycle]方法之一&#xff09;有一些相似之处&#xff0c;但两者在软件开发方面都是根本不同的方法。以下是两者之…...

OJ练习第178题——收集树中金币

收集树中金币 力扣链接&#xff1a;2603. 收集树中金币 题目描述 给你一个 n 个节点的无向无根树&#xff0c;节点编号从 0 到 n - 1 。给你整数 n 和一个长度为 n - 1 的二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间有一条边。再给…...

uni-app打包iOS ipa文件后不上架App store为用户提供下载解决过程记录

写在前面&#xff0c;itms-services协议是什么 itms-services协议是苹果提供的一种让iOS应用在用户设备上无线安装或升级的协议。 具体来说: itms-services表示iOS应用无线安装服务的URL方案,格式为:itms-services://?actiondownload-manifest&urlMANIFEST_URL其中MANIF…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...