设计模式学习(一)——六大原则

[最全]设计模式实战(一)UML&六大原则 UML类图:继承、实现、组合、聚合、依赖和关联。 面向对象六大原则:单一职责; 开闭原则;里式替换原则; 依赖倒置原则;接口隔离原则;迪米特原则。 阅读详情

1.单一职责原则

  • 有且仅有一个原因引起类的变更。

    合理的职责分解,相同的职责放到一起,不同的职责分解到不同的接口和实现中去,这个是最容易也是最难运用的原则,关键还是要从业务出发,从需求出发,识别出同一种类型的职责

    单一职责原则不只是面向对象编程思想所特有的,只要是模块化的程序设计,都适用单一职责。

    比如说一个权限类,就只负责权限内的事情,不要去干涉登录或者角色相关的类,也不要把权限的事情放到其他类里面。否则,相关的代码分散在系统的各个地方,要维护的代码量过大,随着系统的扩张,维护的代码也会成几何增长。
    总结:控制粒度大小,将对象解耦,提高内聚性。

2.开闭原则

  • 模块、类和函数应该对扩展开放,对修改关闭。

    针对提供方,对扩展开放,针对调用方,对修改关闭。

    开闭原则是编程中最基础,最重要的设计原则,只要是面向对象编程,在开发时都会强调开闭原则

    开闭原则是最基础的设计原则,其它的五个设计原则都是开闭原则的具体形态,也就是说其它的五个设计原则是指导设计的 工具和方法,而开闭原则才是其精神领袖。依照java语言的称谓,开闭原则是抽象类,而其它的五个原则是具体的实现类

    一个软件实体的任何变更,不应该是建立在修改的基础上,而是应该对软件实体进行扩展来达到变更的目的。

    总结:对扩展开放,对修改关闭。

3.里氏替换原则

  • 派生类必须完全可替代其基类。

    里氏替换原则告诉我们,在软件中将一个基类对象替换成子类对象,程序将不会产生任何错误和异常。但是反过来就不行了,有子类出现的地方父类就未必能适应。

    里氏替换原则是实现开闭原则的重要方式之一。

    在运用里氏替换原则时,尽量把父类设计成抽象类或者接口,让子类继承父类或实现父接口,并实现父类声明的方法。运行时,子类实例替换父类实例。

4.接口隔离原则

  • 客户端不应该依赖于它不需要的接口

    如果接口隔离原则被破坏,客户端被迫依赖了它不需要的接口,代码就会变得紧密耦合,几乎不可能添加新功能。

    这要求我们将接口细化,尽量减少接口中的方法。
    总结:要为各个类建立他们需要专门的接口。

5.依赖倒置原则

  • 高级模块不应该依赖于低级模块,两者应该依赖于抽象。

  • 抽象不应该依赖与细节,细节应该依赖于抽象。

    举个例子:

    public class Java {
        public void say() {
            System.out.println("我用Java编程");
        }
    }
    
    public class Programmer {
        public void programming(Java java) {
            java.say();
        }
    }
    

    此时,我可以用Java语言编程,但如果我通过学习,掌握了Python,那我该如何扩展类?

    显然是很困难的。但是,如果我们遵从依赖倒置原则,将两者依赖于一个抽象,就会大大提高我们代码的扩展性。

    public interface Language {
        public void say();
    }
    
    public class Java implements Language {
        @Override
        public void say() {
            System.out.println("我用Java编程");
        }
    }
    
    public class Python implements Language {
        @Override
        public void say() {
            System.out.println("我用Python编程");
        }
    }
    
    public class Programmer {
        public void programming(Language language) {
            language.say();
        }
    }
    

    总结:面向接口编程。

6.迪米特法则

  • 一个对象应该对其他对象尽可能少的了解,不和陌生人说话。

    又称最少知识原则。迪米特原则要求我们在设计系统的时候,要尽量减少两个对象之间的交互,如果两个对象之间不需要彼此之间的通信,那么两个对象就不应该发生任何的直接相互作用。

    如果需要调用一个对象的某一个方法,则可以通过第三者转发这个调用。简言之,添加一个第三者,减低现有对象的耦合度。

    书籍
    《Java设计模式及实践》

直捣黄龙~ 这篇文章描述了一个矩阵寻路问题,要求计算从起点到终点的最短路径数量及长度。主要思路是通过BFS算法解决:首先标记哨兵警戒区域为禁区,然后从起点出发进行广度优先搜索,记录每个位置的最短步数和路径条数。当到达终点时,输出路径数和步数;若不可达则返回(0,0)。算法使用队列实现BFS,同时处理路径统计和步数记录,适用于网格寻路类问题。 阅读详情

相关推荐

手把手教你用RTL8306MB搭建小型网络交换机:从原理到实战

本文详细介绍了如何使用RTL8306MB交换芯片从零搭建小型网络交换机的全过程。内容涵盖芯片原理分析、核心硬件电路设计(包括电源、时钟、RMII接口连接要点)、驱动开发与SMI通信实现,以及从物理链路到交换功能的系统调试实战。重点解析了将MAC5配置为RMII PHY模式与CPU对接的关键步骤和常见错误,帮助嵌入式开发者深入理解网络交换原理并完成实践。

weixin_29274969的博客 193

设计模式七大原则---合成复用原则

设计模式 c++ 合成服用原则

jiyanghao19的博客 1646

IAR9.20.4安装与注册全攻略:附资源及典型问题解决方案

本文提供IAR9.20.4的详细安装与注册指南,涵盖环境准备、安装步骤、权限设置及注册机使用技巧。针对典型问题如评估版残留、权限不足和杀毒软件拦截等,给出了具体解决方案,帮助用户顺利完成IAR开发环境的搭建与激活。

a2b3c4d5e的博客 297

寂然解读设计模式- 合成复用原则

I walk very slowly, but I never walk backwards 设计模式原则 - 合成复用原则 ​ 寂然 大家好~,我是寂然,

weixin_44808014的博客 220

深入解析Sigma Delta调制器 —— 从电流采样到数字信号处理的完整链路

本文深入解析了Sigma Delta调制器的工作原理与应用。通过剖析过采样、噪声整形与负反馈核心机制,并结合AMC1306等实例,详细阐述了从电流采样到数字信号处理的完整链路。该技术凭借其高精度和高抗干扰能力,在ADC、电流测量及音频处理等领域发挥着关键作用。

ttt77的博客 645

网络摄像头(IPC)介绍:类型、供电、镜头、夜视等

IPC(Internet Protocol Camera,网络摄像头),它是一种由传统摄像机与网络技术结合所产生的新一代摄像机。它可以将视频、音频、报警及控制信号通过网络传输,接受网络监控主机(NVR或监控管理平台)的管理。IPC可与路由器、交换机、NVR等设备组建成为监控系统。

学无止境,Fighting! 1万+

开发复用:模式 设计模式 反模式 分析模式

模式的起源        设计模式的起源是建筑师Christopher Alexander 的研究,不同时代建筑师留下的伟大建筑作品中,有很多重复出现的设计,于是,他找到了一种结构化、可重用的方法来捕捉并描述这些重复的设计, 还给这些描述的结果起了一个名字叫模式(Pattern)。      “每一个模式描述了一个在人们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能不断地使用...

Mar.三月 396

【YOLOv11】006、YOLOv11数据增强策略:Mosaic、MixUp等增强技术原理解析

摘要:YOLOv11在产线缺陷检测中遇到小尺寸瑕疵漏检问题,暴露了训练数据过于"干净"的缺陷。数据增强的核心是提升模型泛化能力,而非简单扩充数据。Mosaic增强通过多图拼接迫使模型处理多尺度目标,需注意边界框裁剪细节;MixUp通过线性插值使决策边界更平滑,但需避免类别冲突。自适应增强策略应随训练进度动态调整强度。实际应用中,需针对小目标、类别不平衡等场景调整增强参数,并确保验证与推理流程一致。数据增强应针对性解决具体问题,而非盲目尝试组合。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 368

合成复用原则——面向对象设计原则

合成复用原则的定义 合成复用原则(Composite Reuse Principle,CRP)又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)。它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。 如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原...

qq_45564691的博客 401

MTK Camera HAL 与 FeaturePipe 架构解析:从硬件抽象到功能管线的工程落地路径

MTK 的 Camera 系统在 Android 平台下采用高度模块化的 HAL 与 FeaturePipe 架构组合,分别承担着底层硬件抽象与上层功能封装的职责。通过将 ISP、3A 算法、Sensor 驱动与图像处理节点解耦封装于功能链条中,联发科平台实现了灵活可控的影像能力调度机制。本文将基于真实项目实践,系统解析 MTK Camera HAL 与 FeaturePipe 架构的设计思路、核心模块与运行机制,结合 AE/AWB/AF 控制流、Buffer 管理策略、功能管线构建方法与多线程调度实现方式

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1575

Pinocchio 快速详细入门教程 —— 开源机器人运动学动力学库

本文介绍了机器人学中的数字机器人学、正逆运动学、动力学仿真与控制、最优控制等核心主题,以及Pinocchio库的应用。内容包括: 数字机器人学:通过UR5机器人模型演示了构型空间采样、碰撞检测、路径规划等基础操作,使用优化方法在约束条件下寻找有效构型。 运动学:详细讲解了二维和三维机器人的正运动学(构型到末端位置)和逆运动学(目标位置到构型),包括串联机械臂和并联机器人的处理。 动力学与控制:介绍了动力学仿真(如自由落体、摩擦效应)、PD控制、计算扭矩控制,以及接触仿真(碰撞检测与处理)。 最优控制:以独轮

机器人控制与仿真应用 2883

【设计模式】8.设计模式原则-合成复用原则

一、原则:   要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。 二、和继承复用的区别   合成复用和继承复用在类的关系有差别,一个是继承,一个是组合关系。我认为在实际使用时,可以根据业务场景来区别使用,这样不会很乱。   继承复用的优缺点:     优点:     1.使用比较方便,可以直接调用父类的属性以及公共方法,不需要额外再建立父类的对象,直接建...

CAT 671

Claude Code 源码一夜流出:会看热闹的人很多,会读源码的人很少

摘要:Claude Code源码意外泄露后,作者分享了高效的源码学习方法:1)Fork仓库保存代码;2)使用Qoder的Repo Wiki功能生成结构化文档和UML图;3)基于Wiki创建可复用的Skill。这种方法比直接让AI总结代码更系统深入,并推荐了可视化学习项目辅助理解。文章强调实践的重要性,提供了具体工具和操作指南。

722

【设计模式】带你从0到1学习设计模式之六大原则(一)

以前的文章也写过一些设计模式的文章,但是经过思考与沉淀,我决定从新开始,写一些设计模式的文章。

Janson_Lin 850

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

设计模式学习笔记(一)——六大设计原则

六大设计原则(SOLID原则+迪米特法则)是面向对象编程的重要指导准则。单一职责原则要求类功能单一;开闭原则强调扩展而非修改;里氏替换原则确保继承合理性;接口隔离原则拆分臃肿接口;依赖倒置原则将依赖转向抽象;迪米特法则限制对象耦合范围。这些原则虽不强制,但能显著提升代码质量,降低维护成本。初学者可能觉得束缚,但长期实践能培养良好的架构思维。合理运用这些原则,可构建出更健壮、可扩展的软件系统。

WDaMu的博客 1163

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

设计模式学习笔记(一)——六大原则

文章目录一、单一职责原则二、开闭原则三、里氏替换原则四、依赖倒置原则 一、单一职责原则 就一个类而言,应该仅有一个引起他变化的原因。 单一职责表达出的用意就是 “单一” 二字,把各个功能独立出来,让他们满足单一的职责。 对于类的划分,函数职责的划分,每个人的标准可能不同,但是它也有一些基本的原则,比如,两个完全不一样的功能就不能放在一个类中、一个类应该是一组相关性很高的函数、数据的封装。 二、开闭...

PdKingLiu 491

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

设计模式学习笔记(一)设计模式六大原则

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码的可靠性。平常主要有这样的三大类型:那么这些设计模式具体会遵循哪些原则呢?又叫做单一功能原则,每个类只负责一项职责。是面向对象五个基本原则之一。原则定义:一个类只有一个发生变化的原因,否则该类应该被拆分。模拟场景:将 if-else 的用户(访客用户、普通用户和VIP 用户)分类进行编写职责代码(模板模式)规定“软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是对于

weixin_45536242的博客 218

设计模式学习笔记(一)六大原则

设计模式遵循六大原则:单一职责原则、开闭原则、里氏替换原则、最少知识原则(迪米特法则)、接口隔离原则、依赖倒置原则

z875710239的博客 272

设计模式的学习(一):设计模式的六大原则

设计模式简介 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性...

zgz15515397650的博客 222

Java设计模式学习笔记(一)——六大原则

写笔记的意图是强化记忆,其实博客看了不少,但是看过没有应用场景,不写代码要不了多久也就忘了,所以还是再写一遍,加强一下记忆。 设计模式简介 所谓设计模式,就是一套被人们反复使用的、经过分类编目的代码设计经验的总结,它是软件开发人员在开发过程中面临的一般问题的解决方案,是经过长期的试验和错误所获得的。 设计模式的六大原则 1.开闭原则(Open Close Principle) 开...

Ascend2015的博客 350

设计模式学习笔记(一)-六大原则与三大类型

1.1 六大原则 (总原则-开闭原则:对扩展开放,对修改封闭。) 单一职责原则 不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,否则就应该把类拆分。 里氏替换原则(Liskov Substitution Principle) 对“开-闭”原则的补充 是继承复用的基石:任何基类可以出现的地方,子类一定可以出现。 依赖倒转原则(Dependence Inver...

weixin_30852367的博客 419

《设计模式之禅》第二版 学习之六大设计原则(一)

之前的开发中对于代码只是为了使用而使用,没有去深入的理解,从而也造成了开发水平一直原地踏步,对于一个合格的程序员来说,写代码绝不单单是Ctrl+C和Ctrl+V为了完成项目, 于是决定从今天起,用一个月左右的时间去读《设计模式之禅》,希望升华一下自己的编程思想,提高自己的代码水平。前两天的内容偏理论一些,基本是照着书上敲来的。《设计模式之禅》介绍 《设计模式之禅》是设计模式领域公认的3本经典著作

oudetu的博客 442

Android设计模式学习(一)面向对象的六大原则

一、单一职责原则(SRP)一个类,只有一个引起它变化的原因。应该只有一个职责。每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。例如:MVC的分层。二、开闭原则(OCP)软件中的对象(类、模块、函数)应该对于拓展是开放的,意味着模块的行为是可以扩展的。当应用的需求改

timorwu的博客 355

【无标题】拿捏大厂面试,设计模式学习笔记(一)设计模式六大原则

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码的可靠性。平常主要有这样的三大类型:那么这些设计模式具体会遵循哪些原则呢?又叫做单一功能原则,每个类只负责一项职责。是面向对象五个基本原则之一。规定“软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是对于修订是封闭的”子类可以扩展父类的功能,但不能改变父类原有的功能,和Java 中的继承类似。也叫做最小知识原则,意义在于降低类之间的耦合。由于每个对象尽量减少对其他对

澎湖Java架构师的博客 112

Android设计模式学习笔记|一|面向对象的六大原则

单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则。 一、单一职责原则(Single Responsibility Principle SRP) 定义:就一个类而言,应该就有一个引起它变化的原因。简单来说,一个类中应该是一组相关性很高的函数、数据的数据的封装。 二、开闭原则(Open Close Principle  OCP) 定义:软件中的对象(类、模块、函数等...

JunLi_YNU的博客 322

设计模式简单理解

设计模式简单及六大原则 设计模式及六大原则对于学习java语言的同学来说至关重要,本身设计模式就比较抽象,也不是一天两天就能弄懂的,需要经常查看spring源码以及一些好的项目中的设计模式一点点理解,其实理解了六大原则和设计模式也就是真正理解了什么是面向对象思想,也就才能算是java 的入门吧。推荐书籍《设计模式之禅》简单易懂,有需要pdf文件的可以私聊我。 ...

lizhenyu666的博客 184
上一篇: Java虚拟机学习笔记(二)——类文件结构与字节码指令
下一篇: Android消息机制一
<天各一方>
博客等级 码龄6年 17粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值