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

设计模式、系统设计 record part01

技术路线:

工程师==》设计师==》分析师==》架构师

管理路线:

项目经理==》技术经理


工程师:

编程技术、测试技术

设计师:

工程师+设计技术

分析师:

设计师+分析技术

架构师:

分析师+架构技术


项目经理:

时间管理、风险管理、计划管理、过程管理、成本管理、人际沟通

技术经理:

项目经理+领导能力


具备技术素质:

高级技术人才

具备管理素质:

高级管理人才

同时具备技术、管理素质:

高级综合人才

参考书推荐:
head first design patterns(设计模式)
大话设计模式(Java溢彩加强版)
图解设计模式(中国工薪出版集团、人民邮电出版社)


在这里插入图片描述
在这里插入图片描述
前辈们代码设计经验,解决特定问题的一系列套路


好的、坏的设计特征
在这里插入图片描述
Robert C.Martin


向对的设计原则:
在这里插入图片描述


单一职责-Single Responsibility Principle:

在这里插入图片描述
职责《== 原因,应该有且仅有一个原因,引发类的变更
功能 约等于 方法
在这里插入图片描述
仅有一个原因,引发类的变更,
根据这个案例,如果只设计了一个类(员工类),那么,诱发类的变更就有很多原因,
比如要修改收银员的数据就要动这个员工类,要修改接待员的数据也要动这个员工类,要修改厨师的数据也要动这个员工类,所以出现了修改这个员工类会有n个原因,这就违反了SRP,
所以改进的方法是,为每一个工种设置一个类,这样,当要去动某个类的时候,只有一个与其对应的原因,
比如要修改餐服员的数据,只要去动餐服员的类就行,而不需要去管其他工种的类。
这里可以使用粒度这个词来描述职责,
多职责的粒度就是粗的,
单一职责的粒度就是细的。
在这里插入图片描述
DAO(Data Access Object)
把访问数据库的代码封装起来,DAO在数据库与业务逻辑(Service)之间,
Entity层,顾名思义就是实体层,放置一个个实体,及其相应的set、get方法。
如果想要对数据库进行一些操作(比如说读取)的话,就要先写entity层
Service被称作业务逻辑层。
顾名思义,它处理逻辑上的业务,而不去考虑具体的实现
Servlet(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容
Util是utiliy的缩写,是一个多功能、基于工具的包。
如字符串处理、日期处理等,(建立数据库之间的连接),是通用的、与业务无关的,可以独立出来,可供其他项目使用
在这里插入图片描述


开闭-Open Closed Principle:

在这里插入图片描述
在这里插入图片描述
开闭的关键是抽象,
开闭是面向对象设计的终极目标,
开放是,对程序中需求频繁变化部分进行抽象。


里氏替代-Liskov Substitution Principles:
在这里插入图片描述
在这里插入图片描述


依赖倒置-Dependence Inversion Priciple:

在这里插入图片描述
依赖正置: 面向实现。模块之间的依赖,依赖的是实现类
依赖倒置: 面向抽象。模块之间的依赖,依赖抽象

在java中,抽象指的是接口或抽象类,细节就是具体的实现类。
依赖倒转的中心思想是面向接口编程(这句话的意思就是,把具体的 n 个实现抽象成 1 个接口,1:n 【 n 个实现类】到 1:1【 1 个接口】)
以抽象的基础搭建的架构比以细节为基础的架构要稳定的多,
抽象不应该依赖细节,细节应该依赖抽象
接口或抽象类,不涉及任何具体的操作,把展现细节的任务交给接口(或抽象类)的实现类去完成
在这里插入图片描述
september2024the26Thursday

依赖正置,一个类a去引用其他的类(类b、类c),
依赖倒置,针对类b、类c,抽象出来一个接口,类b、类c都继承(implement)这个接口,然后类a去引用这个接口,这就是倒置,
换句话说,打个比方,正置的时候,类a直接去和类b、类c吵架,倒置的时候,类a骂的是类b、类c的爸爸(接口),所以是倒过来的,是指爹骂(不是直接骂儿子,骂的是爹【引用类b、类c的爹】,让儿子自己去体会【类b、类c去 implement 继承它们的爹】)儿子,
正置的时候,类a要去挨个引用其他类,
倒置的时候,类a只引用一个接口,n多的其他类去自动继承接口,这样类a不用关心继承接口的有多少个其他类,只要这些类都继承类a引用的那个接口,类a就能使用这些个类。


接口分离-Interface Segregation Principle:

在这里插入图片描述
在这里插入图片描述
可以看到,上图中,将打电话、发短信、拍照三个方法集成到一起了,这时候,apple手机有能力使用它的三个功能,而老年机实际上并不需要拍照功能,但开发的时候是将三个功能集成到一起了,这时候,老年机用户就被迫依赖了一个并不需要的拍照方法,
解决办法:
把打电话、发短信、拍照做成3个接口,iPhone就调用3个接口,老年机就调用除了拍照以外的打电话、发电信这两个接口,
在这里插入图片描述
不要强迫老年机用户依赖他们并不需要的摄像头拍照方法,


迪米特-Law of Demeter:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一个软件实体应当尽可能少的与其他实体发生相互作用。这样,当一个模块修改时,就会尽量少的影响其他的模块,需要变动的模块的扩展会相对容易。
再举一个例子:
军队里面有元帅、军官和士兵,元帅认识军官,军官认识自己管辖的士兵。
要发动攻击,元帅不必直接对士兵下命令,只需要下命令给军官,再由军官将指令转发给所辖士兵即可。


合成复用-Composite Reuse Priciple:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面这个例子说的是,继承父类时能拿到父类的方法method1、method2,但是拿不到父类的其他子类的方法,因此是不能重用父类的子类的代码,
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
举个栗子:
我在csdn‘程序员胖虎’的博客里找到几个图,看起来比较好理解,如下:
继承
在这里插入图片描述
给继承加元素.
在这里插入图片描述
合成
在这里插入图片描述
给合成加元素,
在这里插入图片描述
合成的扩展性更好些。
找了一圈,‘程序员胖虎’的这个似乎更贴切些,咱们先用着,有时间我再研究研究,又更好的再来更新。
再来一个例子:
来自csdn‘这很张扬’的博客,下图是一个合成复用的图
在这里插入图片描述
下面是一个继承复用的图在这里插入图片描述
再举一个例子:
在这里插入图片描述
一个父类,如下:
在这里插入图片描述
父类里有两个方法,method1、method2,
子类1,如下:
在这里插入图片描述
复写了父类的method2,变成了它自己的方法method2
子类2,如下:
第3个子类,如下:
在这里插入图片描述
复写了父类的method1、method2,变成了自己的method1、method3,
最后,用一个测试类进行测试,如下:
在这里插入图片描述
测试类,结果如下:
在这里插入图片描述
最后这个例子不太好,给人感觉莫名其妙的,不妙不妙,我再想想,等有更好的例子再来更新。

September2024the26thWednesday

相关文章:

设计模式、系统设计 record part01

技术路线: 工程师》设计师》分析师》架构师 管理路线: 项目经理》技术经理 工程师: 编程技术、测试技术 设计师: 工程师设计技术 分析师: 设计师分析技术 架构师: 分析师架构技术 项目经理: 时间…...

服务器与普通电脑的区别是什么?

服务器作为企业进行线上业务所使用的网络设备,大多数的用户对于服务器都有一定的了解,而普通的电脑则是人们在进行日常娱乐活动中经常会用到的设备,本文就来探讨一下服务器与普通电脑之间的区别是什么吧! 普通的电脑就是我们通常所…...

Vue3学习(六)Vue3 + ts几种写法

前言 官网提到组合式api和选项式api 选项式api其实就是vue2的写法&#xff0c;组合式api是vue3的新写法&#xff08;组合式api可以在script中使用setup&#xff08;&#xff09;也可以使用<script setup>&#xff0c;<script setup>是setup&#xff08;&#xff…...

【前端】ES6:Proxy代理和Reflect对象

文章目录 1 Proxy代理1.1 get方法1.2 set方法1.3 has方法1.4 this问题 2 Reflect对象2.1 代替Object的某些方法2.2 修改某些Object方法返回结果2.3 命令式变为函数行为2.4 配合Proxy 1 Proxy代理 Proxy如其名&#xff0c;它的作用是在对象和和对象的属性值之间设置一个代理&am…...

基于微信开发助手企鹅音乐微信小程序的设计与实现(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

学习Spring Boot,应该从哪里开始学起

文章目录 前言1. Java基础2. Spring框架基础3. Spring Boot入门4. 搭建Spring Boot项目5. 编写RESTful API6. 数据库操作7. 安全性和测试8. 部署和运维9. 实践和项目总结前言 学习Spring Boot,应该从哪里开始学起 学习Spring Boot,你可以从以下几个步骤开始学起: 1. Java基…...

【JavaEE初阶】深入解析死锁的产生和避免以及内存不可见问题

前言&#xff1a; &#x1f308;上期博客&#xff1a;【后端开发】JavaEE初阶—线程安全问题与加锁原理&#xff08;超详解&#xff09;-CSDN博客 &#x1f525;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 ⭐️小编会在后端开发的学习中不断更新~~~ &#…...

企微群管理软件:构建高效社群运营的新引擎

在数字化营销日益盛行的今天&#xff0c;企业微信&#xff08;简称“企微”&#xff09;群作为企业与用户直接互动的重要平台&#xff0c;其管理与运营效率直接关系到企业的品牌形象、用户满意度及市场影响力。企微群管理软件&#xff0c;作为专为企微社群设计的高效管理工具&a…...

CORE 中间件、wwwroot

ASP.NET Core中间件组件是被组装到应用程序管道中以处理HTTP请求和响应的软件组件&#xff08;从技术上来说&#xff0c;组件只是C&#xff03;类&#xff09;。 ASP.NET Core应用程序中的每个中间件组件都执行以下任务。 选择是否将 HTTP 请求传递给管道中的下一个组件。这可…...

SpringBoot 与 Maven 快速上手指南

SpringBoot 与 Maven 快速上手指南 在Java开发领域&#xff0c;Spring Boot和Maven是两个极其重要的工具&#xff0c;它们极大地简化了企业级应用的开发和构建过程。Spring Boot通过自动配置和起步依赖等特性&#xff0c;让开发者能够快速搭建起一个Spring应用&#xff1b;而M…...

大觅网之自动化部署(Automated Deployment of Da Mi Network)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…...

【C++】入门基础知识-1

&#x1f36c;个人主页&#xff1a;Yanni.— &#x1f308;数据结构&#xff1a;Data Structure.​​​​​​ &#x1f382;C语言笔记&#xff1a;C Language Notes &#x1f3c0;OJ题分享&#xff1a; Topic Sharing 目录 前言&#xff1a; C关键字 命名空间 命名空间介…...

Redis一些简单通用命令认识常用数据类型和编码方式认识Redis单线程模型

通用命令 get() / set() 这是Redis中两个最为核心的命令。 set插入 这里的key 和 value都是字符串&#xff0c;我们可以加双引号 或者单引号&#xff0c;或者不加。 get查找 如果查询的key值不存在&#xff0c;那么会返回一个 nil &#xff0c;也就是代表空 在Redis中命令…...

使用电子模拟器 Wokwi 运行 ESP32 示例(Arduino IDE、VSCode、ESP32C3)

文章目录 Wokwi 简介安装客户端&#xff08;Mac/Linux&#xff09;创建 Token Arduino IDEVSCode 配置安装 wokwi 插件打开编译后目录 ESP32C3 示例Arduino IDE创建模拟器运行模拟器 Wokwi 简介 Wokwi 是一款在线电子模拟器。您可以使用它来模拟 Arduino、ESP32、STM32 以及许…...

C嘎嘎入门篇:类和对象(1)

前言&#xff1a; 小编在之前讲述了C的部分入门基础&#xff0c;读者朋友一定要掌握好那些&#xff0c;因为C的学习和C有点不同&#xff0c;C的知识都是比较连贯的&#xff0c;所以我们学好了前面才可以学习后面的内容&#xff0c;本篇文章小编将会讲述C真正的入门篇&#xff1…...

tomcat服务搭建部署ujcms网站

tomcat服务搭建部署ujcms网站 关闭selinux和防火墙 setenforce 0 && systemctl stop firewalld安装java环境 #卸载原有java8环境 yum remove java*#上传java软件包&#xff0c;并解压缩 tar -xf openjdk-11.0.1_linux-x64_bin.tar.gz && mv jdk-11.0.1 jdk11…...

unity_Occlusion_Culling遮挡剔除学习

unity_Occlusion_Culling遮挡剔除学习 文档&#xff1a; https://docs.unity.cn/cn/2019.4/Manual/occlusion-culling-getting-started.html没彻底搞明白&#xff0c;但是会用&#xff0c;虽然也不熟练 设置遮挡剔除 打开遮挡剔除面板 设置场景物体。设置为静态 设置场景 烘…...

vue初学随笔

Vue基础 Vue基本概念 Vue是什么 Vue是一个渐进式的JavaScript框架&#xff0c;它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。 渐进式&#xff1a;各个特性可以根据项目需要逐渐引入和…...

IDEA Dependency Analyzer 分析 maven 项目包的依赖

一、场景分析 javax.validation 是我们 SpringMVC 常用的数据校验框架。但是 javax.validation 是一个规范&#xff08;Java Bean Validation&#xff0c;简称 JSR 380&#xff09;&#xff0c;它并没有具体的实现&#xff0c;它的常用实现&#xff0c;是hibernate-validator。…...

微信小程序 - 最新详细安装使用 Vant weapp UI 框架环境搭建详细教程

前言 自从 2024 年开始,小程序做了很多改变和升级, 导致网上很多搭建教程文章的教程失效了,本文来做最新的教程。 第一步 为了更贴合新手,我这里创建了一个纯净无任何业务代码的小程序项目。...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...