Java设计模式(一)

news2024/11/15 11:38:13

系列文章目录

单一职责原则
接口隔离原则
依赖倒转原则


文章目录

  • 系列文章目录
  • 前言
  • 一、单一职责原则
    • 1.单一职责原则注意事项和细节
  • 二、接口隔离原则
    • 1.接口隔离原则基本介绍(Interface Segregation Principle)
    • 2.应传统方法的问题和使用接口隔离原则改进
  • 三、依赖倒转原则
    • 1.依赖倒转原则基本介绍(Dependence Inversion Principle)
    • 2.依赖倒转原则的注意事项和细节
    • 3.依赖关系传递的三种方式
  • 总结


前言

柚子之前想做Java设计模式这个系列蛮久了,现在正式开启~

提示:以下是本篇文章正文内容,下面案例可供参考

一、单一职责原则

1.单一职责原则注意事项和细节

(1)降低类的复杂度,一个类只负责一项职责。
(2)提高类的可读性,可维护性
(3)降低变更引起的风险
(4)通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;
只有类中方法数量足够少,可以在方法级别保持单一职责原则

二、接口隔离原则

1.接口隔离原则基本介绍(Interface Segregation Principle)

(1)客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上
(2)如下图所示:
在这里插入图片描述
(3)类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要的方法。
(4)按接口隔离原则应当这样处理:将接口Interface1拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。
在这里插入图片描述

2.应传统方法的问题和使用接口隔离原则改进

(1)类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要的方法。
(2)将接口Interface1拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。
(3)接口Interface1中出现的方法,根据实际情况拆分为三个接口

三、依赖倒转原则

1.依赖倒转原则基本介绍(Dependence Inversion Principle)

(1)高层模块不应该依赖底层模块,二者都应该依赖其抽象
(2)抽象不应该依赖细节,细节应该依赖抽象
(3)依赖倒转(倒置)的中心思想是面向接口编程
(4)依赖倒转原则是基于这样的设计理念:相当于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在Java中,抽象指的是接口或抽象类,细节就是具体的实现类。
(5)使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。

2.依赖倒转原则的注意事项和细节

(1)低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好。
(2)变量的声明类型尽量是抽象类或接口,这样我们的变量引用和实际对象间,就存在一个缓冲层,利于程序扩展和优化。
(3)继承时遵循里氏替换原则

3.依赖关系传递的三种方式

(1)接口传递
(2)构造方法传递
(3)setter方式传递


总结

单一职责,保持最小化,减小耦合;接口隔离,保证接口各司其职,减小耦合;依赖倒转,面向接口编程。


╭◜◝ ͡ ◜◝╮
( ˃̶͈◡˂ ̶͈ )感觉有用的话,欢迎点赞评论呀!
╰◟◞ ͜ ◟◞╯

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】——调试器-gdb的使用

序言: 本期,我将带领大家学习的关于linux下的调试器gdb的使用,废话不多说跟着我一起去看看吧!! 目录 前言 (一)背景介绍 1、debug模式和release模式 2、为什么Release不能调试但DeBug可以调…

nDreams CEO:是时候打破市场对VR游戏的错误认知了

自Quest系列头显问世以来,VR游戏市场仿佛被注入了一剂强心针,发展速度远超Rift时代。从Quest 1到现在,已经过去4年左右,现在VR游戏市场又走到了哪呢?在GDC 2023上,资深VR游戏工作室和发行商nDreams公布了一…

django-vue-admin-pro 使用

地址: GitHub - dvadmin-pro/django-vue-admin-pro 一、准备工作 Python > 3.8.0 (推荐3.9版本) nodejs > 14.0 (推荐最新) Mysql > 5.7.0 (可选,默认数据库sqlite3,推荐8.0版本) Redis(可选,最新版)项目运行及部署 |…

Android crash 流程详解(一):JE

源码基于:Android R 0. 前言 App crash(全称为 Application crash),又分 java crash 和 native crash,又称 java layer exception(JE) 和 native layer exception(NE)。对于 crash 在开发过程中或多或少都会遇到,本文将整理总结 …

Shell脚本攻略:shell函数应用

目录 一、理论 1.shell函数 2.函数传参 3.函数变量的作用范围 4.递归 5.函数位置变量与脚本位置变量区别 6.创建库 二、实验 1.实验一 一、理论 1.shell函数 (1)概念 将命令序列按格式写在一起,可方便重复使用命令序列。 ① 避免…

JetBrains的Java集成开发环境IntelliJ 2023版本在Win10系统的下载与安装配置教程

目录 前言一、IntelliJ 安装二、使用配置总结 前言 IntelliJ IDEA Ultimate是一款功能强大的Java集成开发环境(IDE)。它提供了丰富的功能和工具,可以帮助开发人员更高效地编写、调试和部署Java应用程序。 IntelliJ IDEA Ultimate的主要特点…

Benewake(北醒) 快速实现TFmini-Plus-IIC与电脑通信的操作说明

目录 1. 概述2. 测试准备2.1 工具准备2.2通讯协议转换 3. IIC通讯测试3.1 引脚说明3.2 测试步骤3.2.1 TFmini-Plus-IIC 与 PC 建立连接3.2.2 获取测距值3.2.3 更改 slave 地址 1. 概述 通过本文档的概述,能够让初次使用测试者快速了解测试 IIC 通信协议需要的工具以…

48. 旋转图像

48. 旋转图像 C代码&#xff1a; void rotate(int** matrix, int matrixSize, int* matrixColSize){int m matrixSize;int n matrixColSize[0];int arr[m*n];int arrTop 0;memset(arr, 0, sizeof(int) * m * n);for (int i 0; i < m; i) {for (int j 0; j < n; j) …

【Springcloud】分布式搜索elasticsearch

文章目录 1、ElasticSearch 1、ElasticSearch 先看下翻译&#xff1a; elasticsearch是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 项目在运行的时候会产生海量的日志信息&#xff0c;而elasticsearch结合kibana、Logstash、Beats&am…

2023免费的苹果手机备份app软件iMazing

苹果备份APP怎么备份&#xff1f;一般情况下&#xff0c;苹果手机备份照片、短信等可以使用iCloud备份。虽然App也可以使用iCloud备份&#xff0c;但是App数据一般较多&#xff0c;需要较大的iCloud存储空间&#xff0c;而免费的iCloud存储空间只有5GB&#xff0c;很多人都不想…

[C++] 继承和多态

Be water my friend. 一.关于继承(inheritance) 基础知识&#xff1a; 继承的定义格式&#xff1a; 继承方式的比较&#xff1a; 继承中的作用域&#xff1a; 基类和派生类对象赋值转换 : 派生类的默认成员函数 关于继承的补充 如何防止继承的发生(final关键字…

ThreeJS教程:CSS3批量标注多个标签

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 CSS3批量标注多个标签 下面下工厂为例&#xff0c;使用CSS3DRenderer批量渲染多个HTML元素标签。 CSS3渲染器基本代码 CSS3渲染器代码和上节课内容一样设置即可。 // 引入CSS3渲…

掌握哪些测试技术才能说自己已经学成了?

一、过硬的基础能力 其实所有的测试大佬都是从底层基础开始的&#xff0c;随着时间&#xff0c;经验的积累慢慢变成大佬。要想稳扎稳打在测试行业深耕&#xff0c;成为测试大牛&#xff0c;首当其冲的肯定就是拥有过硬的基础&#xff0c;所有的基础都是根基&#xff0c;后期所…

Docker利用DockerFile创建部署NVIDIA+PyTorch容器

Docker利用DockerFile创建部署NVIDIAPyTorch容器 1、创建 Dockerfile2、在 Dockerfile 中添加关键字和命令3、使用 Docker Build 命令构建镜像4、验证和测试 Docker 映像 1、创建 Dockerfile 首先在用户的主目录下创建一个名为 mycode 的文件夹&#xff0c;然后创建 Dockerfil…

马斯克:我是 Rust 粉丝,但为了性能我会毫不犹豫选择 C/C++

作为一个几乎时刻处于风口浪尖上的“网络红人”&#xff0c;特斯拉 CEO 埃隆马斯克(Elon Musk)被外界评价为“致力于从人工智能手中拯救人类”的钢铁侠。近期&#xff0c;这位大佬又因不少“出格”言论而在社交媒体上引发热议 —— 在一家 AI 公司谈论编程“error messages”的…

【备战秋招】每日一题:4月1日美团春招(二批)第四题:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

电商 - 高并发下订单商品库存扣减方案

开发一个电商库存系统时,我们最担心的就是高并发和防超卖了 电商库存系统场景 前提:分布式系统,高并发 商品A只有100库存,现在有1000或者更多的用户购买。如何保证商品库存在高并发的场景下是安全的 高并发场景下,商品展示页上面的信息,除了库存的其他信息属于静态数据…

ClickHouse性能调优——压缩和编码算法

随着数据库数据越来越多&#xff0c;给数据存储、网络访问造成成本和负担。压缩技术节约存储空间、加速网络访问的常用解决方案&#xff0c;本文主要介绍压缩算法和ClickHouse编码技术。 压缩类型 ClickHouse协议支持LZ4和ZSTD 压缩算法&#xff0c;两者都是基于字典使用校验和…

【Linux】信号(一文学会,八千字好文深度讲解信号)

目录 1.信号的初步理解 2.信号处理 信号的产生 信号的保存 前台进程和后台进程 信号处理以及产生信号 对于信号的处理方式有三种 产生信号&#xff1a; 1.通过终端按键产生信号 2.调用系统函数向进程发信号​编辑 ​编辑 3. 由软件条件产生信号 4.硬件异常产生信…

docker私有仓库harbor部署

1. harbor简介&#xff1a; Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器&#xff0c;通过添加一些企业必需的功能特性&#xff0c;例如安全、标识和管理等&#xff0c;扩展了开源Docker Distribution。作为一个企业级私有Registry服务器&#xff0c;Harbor提…