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

高级架构五 设计模式

一 设计模式七大原则

1.1. 设计模式目的

编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好的:

  1. 代码重用性 (即:相同功能的代码,不用多次编写)
  2. 可读性 (即:编程规范性, 便于其他程序员的阅读和理解)
  3. 可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)
  4. 可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)
  5. 使程序呈现高内聚,低耦合的特性

分享金句:
设计模式包含了面向对象的精髓,“懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要”。

1.2 设计模式七大原则

设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据)。

设计模式常用的七大原则有:

  • 单一职责原则
  • 接口隔离原则
  • 依赖倒转(倒置)原则
  • 里氏替换原则
  • 开闭原则
  • 迪米特法则
  • 合成复用原则

1.2.1 单一职责原则

基本介绍:
对类来说的,即一个类应该只负责一项职责。如类 A 负责两个不同职责:职责 1,职责 2。当职责 1 需求变更而改变 A 时,可能造成职责 2 执行错误,所以需要将类 A 的粒度分解为 A1,A2

应用实例:
案例一演示代码如下

package cn.tx.rule1.singleresponsibility;public class Demo1 {public static void main(String[] args) {// 创建工具对象Vehicle vehicle = new Vehicle();vehicle.run("汽车");vehicle.run("飞机");}
}// 交通工具
class Vehicle{// 行驶public void run(String name){System.out.println(name+ " 在公路上行驶...");}}

案例二代码如下:

package cn.tx.rule1.singleresponsibility;/**1. 遵守单一职责原则2. 但是这样做的改动很大,即将类分解,同时修改客户端3. 改进:直接修改 Vehicle 类,改动的代码会比较少=>方案 3*/
public class Demo2 {public static void main(String[] args) {RoadVehicle roadVehicle = new RoadVehicle();roadVehicle.run("汽车");AirVehicle airVehicle = new AirVehicle();airVehicle.run("飞机");}}class RoadVehicle {public void run(String name) {System.out.println(name + " 公路运行...");}
}class AirVehicle {public void run(String name) {System.out.println(name + " 天空运行...");}
}

案例三代码如下

package cn.tx.rule1.singleresponsibility;/**1. 这种修改方法没有对原来的类做大的修改,只是增加方法2. 这里虽然没有在类这个级别上遵守单一职责原则,但是在方法级别上,仍然是遵守单一职责*/
public class Demo3 {public static void main(String[] args) {Vehicle2 vehicle2 = new Vehicle2();vehicle2.run("汽车");vehicle2.run("飞机");}}class Vehicle2 {public void run(String name) {System.out.println(name + " 在公路上运行....");}public void runAir(String name) {System.out.println(name + " 在天空上运行....");}}

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

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

1.2.2 接口隔离原则

相关文章:

高级架构五 设计模式

一 设计模式七大原则 1.1. 设计模式目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好的&#…...

RFID手持机与RFID工业平板在仓储物流管理系统中的选型

概述 随着物联网技术在仓储物流管理系统中的普及,RFID手持机与RFID工业平板作为基于RFID技术手持式读写器的两种重要终端设备形态,得到了广泛应用。尽管RFID手持机与RFID工业平板都具备读写 RFID标签的基本功能,使用场景较为类似&#xff0c…...

IoC设计模式详解:控制反转的核心思想

前言:在软件开发中,设计模式是一种经过验证的、在特定场景下能有效解决问题的解决方案。控制反转(Inversion of Control,IoC) 作为一种设计模式,通过让程序的控制流和对象管理反转,从而使得代码…...

《云原生安全攻防》-- K8s安全配置:CIS安全基准与kube-bench工具

在本节课程中,我们来了解一下K8s集群的安全配置,通过对CIS安全基准和kube-bench工具的介绍,可以快速发现K8s集群中不符合最佳实践的配置项,及时进行修复,从而来提高集群的安全性。 在这个课程中,我们将学习…...

LINUX下载编译gtk

下载 选择自己合适的版本 GNOME / gtk GitLab 下载meson GNOME / gtk GitLab 编译 BUILD_DIRbuilddir INSTALL_DIR${HOME}/gtk-resultMESON_PATHpwd/meson-1.6.1/meson.py${MESON_PATH} setup \--prefix ${INSTALL_DIR} \${BUILD_DIR}cd builddir${MESON_PATH} compile…...

基于VSCode软件框架的RISC-V IDE MRS2正式上线发布

基于VSCode软件框架的RISC-V IDE MRS2正式上线发布 一、概述 MounRiver Studio Ⅱ(MRS2)为MounRiver Studio的换代版本,从V2.1开始,框架更换至更现代的VSCode,并深度定制开发。在工程管理、代码编辑、编译、调试等方面均兼容之前版本&#…...

AWS re:Invent 2024 - Dr. Werner Vogels 主题演讲

今年,我有幸亲临现场参加了所有的 keynote,每一场都让我感受到深深的震撼。无论是全新的功能发布,还是令人眼前一亮的新特性展示,每一场 keynote 都精彩纷呈,充满干货,值得反复学习和回味。 恰好&#xff…...

前端小案例——520表白信封

前言:我们在学习完了HTML和CSS之后,就会想着使用这两个东西去做一些小案例,不过又没有什么好的案例让我们去练手,本篇文章就提供里一个案例——520表白信封 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主…...

FPGA随记——过约束

什么是过约束? 从字面意思来看,所谓过约束是指约束过紧了。这个“过”体现在setup requirement变小了,对于单周期路径,这个值通常与时钟周期一致,但在过约束情况下,等效于这个值变小了,也就是时…...

如何利用云计算进行灾难恢复?

云计算环境下的灾难恢复实践指南 天有不测风云,企业的IT系统也一样,我见过太多因为没有做好灾备而吃大亏的案例。今天就和大家聊聊如何用云计算来做灾难恢复。 一个惊心动魄的真实案例:某电商平台的主数据中心因为市政施工不小心挖断了光纤…...

【华为OD-E卷 - 九宫格按键输入 100分(python、java、c++、js、c)】

【华为OD-E卷 - 九宫格按键输入 100分(python、java、c、js、c)】 题目 九宫格按键输入,有英文和数字两个模式,默认是数字模式,数字模式直接输出数字,英文模式连续按同一个按键会依次出现这个按键上的字母…...

基于AI大模型的医院SOP优化:架构、实践与展望

一、引言 1.1 研究背景与意义 近年来,人工智能(AI)技术取得了迅猛发展,尤其是大模型的出现,为各个领域带来了革命性的变化。在医疗领域,AI 医疗大模型正逐渐崭露头角,展现出巨大的应用潜力。随着医疗数据的海量积累以及计算能力的大幅提升,AI 医疗大模型能够对复杂的…...

Linux快速入门-一道简单shell编程题目

编写一个 Shell 程序。 功能:在用户家目录下创建一个文件夹myshell;进入此文件夹;在文件中创建文件aa.sh,如果文件夹或文件存在,则提示对象已存在,不创建。 代码编写 #!/bin/bash#获取用户家目录:方便后…...

Hive如何创建自定义函数(UDF)?

目录 1 自定义UDF函数基础 2 自定义UDF函数案例 3 创建临时函数 4 创建永久函数 1 自定义UDF函数基础 1. 内置函数:Hive 自带了一些函数...

聊聊前端框架中的process.env,env的来源及优先级(next.js、vue-cli、vite)

在平时开发中,常常使用vue、react相关脚手架创建项目,在项目根目录可以创建.env、.env.[mode](mode为development、production、test)、.env.local等文件,然后在项目中就可以通过process.env来访问相关的环境变量了。 下面针对如下…...

linux shell脚本 【分支结构case...in 、循环结构、函数】内附练习

1.思维导图 2.练习 1.定义一个find函数&#xff0c;查找ubuntu和root的gid 2.定义一个数组&#xff0c;写一个函数完成对数组的冒泡排序 bubble() {n${#arr[*]}for((i0;i<n-1;i));dofor((j0;j<n-1-i;j));doif ((arr[j]>arr[j1]));thentemp${arr[j]}arr[j]${arr[j1]}a…...

VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本”

VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1&#xff0c;因为在此系统上禁止运行脚本”VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1&#xff0c;因为在此系统上禁止运行脚本”解决方案&#xff1a; 1.用get-ExecutionP…...

Android ActionBar 技术深度解析

Android ActionBar 技术深度解析 概述 ActionBar 是 Android 应用中的一个核心 UI 组件,用于提供导航、操作和品牌展示。它通常位于应用窗口的顶部,包含应用的标题、导航按钮、操作项等。ActionBar 自 Android 3.0(API 11)引入,并在 Android 5.0(API 21)后被 Toolbar …...

matlab-数字滤波器设计与实战

文章目录 数字滤波器设计FIR 滤波器设计IIR 滤波器设计巴特沃斯滤波器切比雪夫 I 型滤波器切比雪夫II型椭圆滤波器线性相位与非线性相位零相位响应数字滤波器实战数字滤波器产生延迟的主要原因补偿滤波引入的延迟补偿常量滤波器延迟补偿与频率有关的延迟从信号中除去不需要的频…...

JDK的运作原理

JDK&#xff08;Java Development Kit&#xff09;是Java开发者用来构建、编译、调试和运行Java应用程序的一套工具包。其核心原理涉及到Java语言的编译、执行以及Java虚拟机&#xff08;JVM&#xff09;的运作等多个方面。 1. Java编译原理 Java是一种先编译后解释执行的语言。…...

Touchpoint:命令行工具集中管理工作上下文,提升开发效率

1. 项目概述&#xff1a;一个被低估的开发者效率工具如果你和我一样&#xff0c;日常开发工作需要在多个代码仓库、项目管理工具&#xff08;如Jira、Linear&#xff09;、文档平台&#xff08;如Confluence、Notion&#xff09;和沟通软件&#xff08;如Slack&#xff09;之间…...

深度解析Scarab:空洞骑士模组管理器的专业实现与架构设计

深度解析Scarab&#xff1a;空洞骑士模组管理器的专业实现与架构设计 【免费下载链接】Scarab An installer for Hollow Knight mods written with Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 空洞骑士模组管理器Scarab为玩家提供了高效、专业的模组…...

AICoverGen终极指南:5分钟用AI制作专业级翻唱歌曲

AICoverGen终极指南&#xff1a;5分钟用AI制作专业级翻唱歌曲 【免费下载链接】AICoverGen A WebUI to create song covers with any RVC v2 trained AI voice from YouTube videos or audio files. 项目地址: https://gitcode.com/gh_mirrors/ai/AICoverGen 想不想让AI…...

地下态势智能研判,拔高硐室深部安全透明管控等级技术白皮书

地下态势智能研判&#xff0c;拔高硐室深部安全透明管控等级技术白皮书 副标题&#xff1a;全要素三维动态重建井下场景&#xff0c;融合井下无感坐标解算、跨断面跨镜轨迹串联、身体指纹人员轨迹存档&#xff0c;井下风险前置感知、动态全程透明追溯 前言 矿山井下深部硐室与纵…...

怎样免费让老Mac重获新生:OpenCore Legacy Patcher专业教程

怎样免费让老Mac重获新生&#xff1a;OpenCore Legacy Patcher专业教程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 想让你的旧Mac重新焕发活力吗&#xf…...

解放你的游戏时间:三月七小助手——星穹铁道自动化终极指南

解放你的游戏时间&#xff1a;三月七小助手——星穹铁道自动化终极指南 【免费下载链接】March7thAssistant 崩坏&#xff1a;星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 还在为《崩坏&#xff1a;星穹铁道》中重复的…...

从单一AI到智能体集群:构建模块化AI协作系统的核心原理与实践

1. 项目概述&#xff1a;当AI学会“开会”&#xff0c;一个开源智能体集群的诞生最近在GitHub上看到一个挺有意思的项目&#xff0c;叫daveshap/OpenAI_Agent_Swarm。光看名字&#xff0c;你可能会觉得这又是一个调用OpenAI API的简单封装库。但如果你点进去&#xff0c;花上十…...

ElevenLabs葡语语音私密训练技巧(仅限白名单客户使用的SSML扩展语法+方言权重微调指令集)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs葡语语音私密训练的核心价值与白名单准入机制 ElevenLabs 的葡语语音私密训练&#xff08;Private Voice Fine-tuning for Portuguese&#xff09;专为高合规性场景设计&#xff0c;面向金融…...

Tea印相失效诊断清单:从--v 6.2到--v 6.6,6个版本兼容性断点及降级回滚方案(含JSON config快照备份包)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Tea印相失效诊断清单&#xff1a;从--v 6.2到--v 6.6&#xff0c;6个版本兼容性断点及降级回滚方案&#xff08;含JSON config快照备份包&#xff09; Tea印相&#xff08;TeaYinXiang&#xff09;在 v…...

大语言模型可靠性监测与压缩的谱方法研究

1. 大语言模型可靠性监测与压缩的谱方法研究概述在深度学习领域&#xff0c;大语言模型(LLM)和视觉语言模型(VLM)的可靠性问题与计算效率挑战日益凸显。模型幻觉(生成与输入无关或错误的内容)和分布偏移(面对训练数据分布外的输入时性能下降)会严重损害用户信任&#xff0c;而庞…...