设计模式六大设计原则

【Java】六大设计原则和23种设计模式 代理模式给某一个对象提供一个代理对象并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介公司来买车,他们来给我找车源,帮我办理车辆过户流程,我只是负责选择自己喜欢的车,然后付钱就可以了。 阅读详情

 

设计模式六大设计原则

单一职责原则
里氏替换原则
依赖倒置原则
接口隔离原则
迪米特法则

 
开闭原则
 
 
 
 
 
 
 
 

单一职责原则

单一职责原则(Single Responsibility Principe,简称SRP)

从字面上理解就是一个类只负责单一的职责,也就是功能单一。

那么问题来了,怎么来划分呢?划分的依据又是什么呢?

难点就在这里,并没有一个衡量的标准,具体的职责划分还需要根据实际情况来定,当然还有项目经理和客户。

一般基于RBAC(基于角色的访问控制Role Based Access Control)的角色管理类的模块,对角色的权限的管理,是操作和资源相分离。

单一职责:应该有且仅有一个原因引起类的变更

单一职责的好处

降低类的复杂度,每个类的职责清晰明确

提高可读性

提高可维护性

降低变更风险,如果没有做好单一职责,那么一个接口的变更将影响甚广,不利于系统的扩展

类的单一原则的实现是受多种因素的制约的,设计的时候需要考虑众多的因素

类的设计应尽量做到只有一个原因引起变化

里氏替换原则

面向对象的三大原则之一——继承Extends

减少代码的工作量

提高代码的重用性

提高代码的扩展性,子类继承父类

java中单一继承

里氏替换原则(Liskov Substitution Principle 简称LSP)

OCP作为OO的高层原则

主张使用“抽象(Abstraction)”和“多态(Polymorphism)”将设计中的静态结构改为动态结构

维持设计的封闭性。

“抽象”是语言提供的功能。“多态”由继承语义实现的。

定义:

如果对每一个类型为S的对象O1,都有类型为T的对象O2,

使得以T定义的所有程序P在所有的对象O1都代换成O2时。

程序P的行为没有发生变化,那么类型S是类型T的子类型。

 

所有引用基类的地方必须能够透明使用其子类的对象

1、子类必须完全实现父类的方法 (实现接口)

2、子类可以有自己特有的东西

3、覆盖或实现父类的方法时输入参数可以放大,(重载)

4、覆盖或实现父类的方法时输出结果可以被缩小

如果子类当做父类来用就需要剔除子类的特性,这样继承就没有意义了

依赖倒置原则

依赖倒置原则(Dependence Inversion Principe,DIP)

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

每一个逻辑实现都应该是由原子逻辑组成的,

底层模块就是不可分割的原子逻辑

高层模块就是原子逻辑的再组装

2、抽象不应该依赖细节

抽象就是指接口或抽象类,两者都不能被实例化

3、细节应该依赖抽象

细节就是实现类

实现接口、继承抽象类产生的类就是细节,可以被实例化,也就是加上new产生的对象

 

程序要依赖于抽象接口,不要依赖于具体实现。

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

面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,

这就会导致模块的复用性降低而且大大提高了开发的成本。

面向对象的开发很好的解决了这个问题,

一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。

即使实现细节不断变动,只要抽象不变,客户程序就不需要变化。这大大降低了客户程序与实现细节的耦合度

 

java中的应用

模块间的依赖通过抽象产生,实现类之间不能发生直接的依赖关系

其依赖是通过接口或者抽象产生的

接口或抽象类不依赖于实现类

实现类依赖接口或抽象类

说白了就是OOD(面向接口编程)

 
 
 

接口隔离原则

接口隔离原则(ISP--Interface Segregation Principle)

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

一个类对另一个类的依赖应该建立在最小的接口上

        不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。”这个说得很明白了,再通俗点说,不要强迫客户使用它们不用的方法,如果强迫用户使用它们不使用的方法,那么这些客户就会面临由于这些不使用的方法的改变所带来的改变。

类继承的接口中的方法应该是至少用到一次的

接口分两种

实例接口:new一个对象时所使用的,在某种角度,java中类也是一种接口

类接口:interface关键字定义的接口

保证接口的纯洁性

接口隔离原则是对接口进行规范约束

1、接口尽量要小

首先不能违反单一职责原则。根据接口隔离原则拆分接口时,首先必须满足单一职责原则。

2、接口要高内聚

高内聚就是提高接口、类、模块的处理能力,减少对外交互,具体的操作就是在接口中少公布public方法,接口是对外的承诺,承诺越少对系统开发越有利

3、定制服务

系统内的模块之间必然会有耦合,有耦合就存在相互访问的接口,所谓的定制服务就是单独为实现某个类设计的接口,避免出现该类不需要的功能实现。

4、接口设计师有限度的

接口设计粒度越小,系统越灵活。但是还要注意适度,避免接口复杂化,应减少开发难度,提高可维护性。

接口隔离原则是对接口的定义,某种角度也是对类的定义,接口和类尽量使用原子接口或原子类来组装。根据以下衡量规则

1、一个接口只服务于一个子模块或业务逻辑类

2、通过业务逻辑压缩接口中的public方法

3、已经污染的接口尽量去修改

4、了解具体的环境,拒绝盲从

实践、经验、领悟

迪米特法则

迪米特法则(Law of Demeter,LoD)也称最少知识原则(Least Knowledge Principle)

就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话

迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。

 

狭义的迪米特法则

如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

朋友圈的确定

“朋友”条件:

1)当前对象本身(this)

2)以参量形式传入到当前对象方法中的对象

3)当前对象的实例变量直接引用的对象

4)当前对象的实例变量如果是一个聚集,那么聚集中的元素也都是朋友

5)当前对象所创建的对象

任何一个对象,如果满足上面的条件之一,就是当前对象的“朋友”;否则就是“陌生人”。

狭义的迪米特法则的缺点:

在系统里造出大量的小方法,这些方法仅仅是传递间接的调用,与系统的商务逻辑无关。

遵循类之间的迪米特法则会是一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接的关联。但是,这也会造成系统的不同模块之间的通信效率降低,也会使系统的不同模块之间不容易协调。

广义的迪米特法则在类的设计上的体现:

优先考虑将一个类设置成不变类。

尽量降低一个类的访问权限。

谨慎使用Serializable。

尽量降低成员的访问权限。(这段来自baidu)

1、只和朋友交流

一个类只和朋友类交流,不于陌生的类交流,类和类的关系是建立在类间而不是方法间,一个方法尽量不引入一个类中不存在的对象

2、即使是朋友类也不能距离太近(俩个刺猬相互取暖)

一个类的public属性、方法越多,修改设计的就越多,变更风险越大

3、是自己的就是自己的

一个方法放在本类中,既不增加类间的关系,对类不产生负面影响,那就放置在本类中。

迪米特法则的核心:

类间解耦、弱耦合,然后类的复用率才可以提高,这样就会产生大量的中间类。类间的解耦要有限度。设计时应该权衡项目,结构清晰,同时做到高内聚,低耦合。(六度分隔理论)

开闭原则

开闭原则(OCP)是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段。

 

对于扩展是开放的(Open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。

对于修改是关闭的(Closed for modification)。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,无论是可链接的库、DLL或者.EXE文件,都无需改动。

实现开闭原则的关键就在于“抽象”。

把系统的所有可能的行为抽象成一个抽象底层,这个抽象底层规定出所有的具体实现必须提供的方法的特征。

作为系统设计的抽象层,要预见所有可能的扩展,从而使得在任何扩展情况下,系统的抽象底层不需修

由于可以从抽象底层导出一个或多个新的具体实现,可以改变系统的行为,因此系统设计对扩展是开放的。

开闭原则是一个基础原则,前面五个原则都是开闭的具体形态。

开闭为抽象,前五为实现类

1、抽象约束

通过接口或抽象类的约束扩展,对扩展进行边界限定

参数类型、引用类型尽量使用接口或者抽象类,而不是实现类

抽象层尽量保持稳定

2、元数据控制模块行为

元数据:描述环境和数据的数据

struct中的拦截器

3、制定项目章程

4、封装变化

相同的变化封装到一个接口或抽象类

不同的变化封装到不同的接口或抽象类

Single Responsiblity Principle 单一职责原则

Open Close Principle· 开闭原则

Liskov Substitution Principle 里氏替换原则

Law of Demter 迪米特法则

Interface Segregation Principle 接口隔离原则

Dependence Inversion Principle 依赖倒置原则

SOLID 稳定的

参考:设计模式之禅 秦小波

没能用好这个编辑器,排版格式有点问题

 

华为2019秋招笔试Java实现(2) 华为2019秋招笔试Java实现(2) 笔试日期2019年8月14日 第二题(200分) 题目描述 某程序员小A,有一种表格数据需要存储在文件中。表格中的每一行,由若干个字段组成,每个字段可以是整数或字符串(字符串只包含数字、字母以及特殊字符!@#%^&*()",)。小A设计了一种存储格式,采用文本的方式对表格数据进行存储。文本文件中的每一行,代表了表格数据中的一行数据。具体格式描述如下: 1、采用逗号分隔不同的字段(逗号前后无空格); 2、数字直接采用10进制的文本存储; 3、字符串的存储规则如下 阅读详情

相关推荐

手把手教你搞定JBI投稿:从Statement of Significance到Declaration Statement的保姆级避坑指南

本文提供了一份详细的JBI投稿指南,重点解析Statement of Significance和Declaration of Interests的撰写技巧,帮助研究者避开常见格式陷阱。通过实战案例和检查清单,确保投稿符合JBI的学术严谨性和临床转化价值要求,提升稿件通过率。

weixin_29278805的博客 622

设计模式六大原则汇总

单一职责原则: 不要存在多于一个导致类变更的原因,通俗的说,即一个类只负责一项职责 遵循单一职责原的优点有: 可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多; 提高类的可读性,提高系统的可维护性; 变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改...

173

微软Media Creation Tool 创建工具 1.3 升级:支持全新下载安装Win11 22H2 Build 22621.525

微软 Media Creation Tool 创建工具 1.3 升级:支持全新下载安装 Win11 22H2 Build 22621.525 ISO 镜像,如果今天运行使用 Media Creation Tool,则会下载 Windows 11 2022 版本 Build 22621.525,它不会向操作系统添加任何新内容,但会修复安装问题,下面来看看详细的更新内容。

zym0218的博客 4231

设计模式分类与六大原则

设计模式分类 设计模式六大原则 Refer 一、设计模式的分类 总体来说设计模式分为三大类: 1、创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。2、结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。3、行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问

m_xiaoer的博客 739

自动驾驶预测决策规划八股

预测规划八股个人总结。

dawushixiange的博客 479

LC-3 机器语言 指令集

生活本就沉闷,但跑起来就有风

笔记 1万+

设计模式的三大分类及六大原则

一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两...

烁干的博客 2万+

智能车竞赛走马观碑组:赛道元素与目标板识别策略解析

本文深入解析了智能车竞赛走马观碑组别的核心挑战与策略。重点探讨了如何应对PVC赛道的光照、磨损及无边界线等复杂环境,并详细阐述了基于红色引导区的目标板高效识别流程。通过平衡轻量化模型选择、实时决策与精准控制,实现赛道元素适应性与目标板识别策略的优化,为参赛者提供了一套完整的系统集成与实战调参思路。

x8y9z0的博客 460

六大设计原则

文章目录单一职责原则(Single Responsibility Principle)里氏替换原则(Liskov Substitution Principle)依赖倒置原则(Dependence Inversion Principle,DIP)接口隔离原则迪米特法则(Law of Demeter)开闭原则(Open Close Principle) 单一职责原则(Single Responsibi...

爱折腾的Albert 225

避坑指南:ZYNQ平台上AXI 1G/2.5G Ethernet Subsystem实现IEEE1588的5个关键点

本文详细解析了在ZYNQ平台上使用AXI 1G/2.5G以太网子系统实现IEEE1588精密时间协议(PTP)的5个关键避坑点。从硬件选型、Vivado工程配置到Linux驱动适配,提供了实战经验与优化技巧,帮助工程师在工业自动化、电力系统等场景中实现纳秒级时间同步。

weixin_30687051的博客 234

Rerender A Video 技术浅析(四):跨帧约束

时间一致性是指在视频处理过程中,保持相邻帧之间内容、风格和运动的平滑过渡,避免出现视觉上的不连续性或伪影。时间一致性跨帧约束模块的主要目标是在视频增强、风格迁移等任务中,确保处理后的视频在时间维度上保持一致性和稳定性。该模块主要通过以下几种方式实现时间一致性:1.时序损失(Temporal Loss):最小化相邻帧之间的差异,确保帧间内容的平滑过渡。2.循环一致性损失(Cycle Consistency Loss):确保帧间转换的一致性,避免出现风格漂移。3.

m0_75253143的博客 1480

设计模式--六大原则与三种类型

一.6大原则 1.单一职责原则(Single Responsibility Principle) 定义:就一个类而言,应该仅有一个引起它变化的原因;     如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责变化可能会消弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏;     T负责两个不同的职责:职责P1,职责P2。当由

随心更博 4123

高通拨号流程介绍

本文介绍了高通平台(如SDX55)中APSS(A7处理器)与ModEM(Q6处理器)间的通信机制。

四儿家的小祖宗的博客 1068

设计模式之六大设计原则

古人云: 有道无术,术可求.有术无道,止于术.而设计模式通常需要遵循一些设计原则,在设计原则的基础之上衍生出了各种各样的设计模式。设计原则是设计要求,设计模式是设计方案,使用设计模式的代码则是具体的实现。设计模式中主要有六大设计原则,简称为SOLID ,是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的),六大设计原则分别如下:​1、单一职责原则(Single Responsibitity Principle)​2、开放封闭原则(Open Close Principle)​。

在青海看海的企鹅的博客 2923

WINCC7.3破解文件

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

设计模式(Design Pattern , DP)的六大设计原则

设计模式(Design Pattern ,DP) 设计模式的背景 经过这段时间的学习,了解到了“设计模式”这个词,“设计模式”这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 直到1990年,软件工程界才开始研讨设计模式的话题。 1995年,“四人组”(Gang of Four,GoF)合作出版了《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)一书,在书籍中收录了23个设计模

weixin_43515837的博客 1595

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

JAVA设计模式总结之六大设计原则

JAVA设计模式总结之六大设计原则

weixin_44873946的博客 216

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【设计模式精解】六大设计原则

主要介绍了设计模式中的六大设计原则。开闭原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特原则,单一职责原则。这几大原则是设计模式使用的基础,在使用设计模式时,应该牢记这六大原则。

先做到 再看见 1376

【设计模式】详解设计模式中的六大设计原则

针对单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则等六大设计原则进行详细讲解

qq_41526047的博客 917

【设计模式】六大设计原则

毕竟现实中都是实在的量,接口有几个参数,我继承了几个类,等等。所以我要说的是,如果违背原则的代价可以承受,那就可以违背原则。更注重设计的利弊思辨,而不是一个固定的答案。我认为仔细揣摩这六大原则,使用六大原则来分析23种设计模式的利弊,才是学习设计模式的正途。所以,如果几个职责的实现不会有太大变化,或者这些职责只在一个地方用的时候,违背这个原则也无碍。六大设计原则,是针对面向对象的设计模式的原则,也就是针对 封装、继承和多态 的使用原则。但说到底,职责的划分也是设计,把两件事当做一个职责也不是不可能。

weixin_43233774的博客 1016

设计模式及六大设计原则简介

设计模式及六大设计原则简介 1. 设计模式简介 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。是软件开发人员在软件开发过程中面临一般问题的解决方案,这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性,使代码编写真正工程化。 2. 什么是GOF(四人帮...

这世上所有的久处不厌,都是因为用心 349

六大设计原则及23种设计模式

包含六大设计原则及23种设计模式

weixin_45692534的博客 2640

设计模式系列,六大设计原则

设计模式和性能优化有没有关系?最近,我看到有人再讲性能优化的时候,讲到了“有些设计模式可以做到一定程度的性能优化”。我读书少,别骗我。我看过无数篇设计模式了,第一次听到有...

xmt1139057136的专栏 757

Java设计模式六大设计原则

从今年的七月份开始学习设计模式到9月底,设计模式全部学完了,在学习期间,总共过了两篇;第一篇看完设计模式后,感觉只是脑子里面有印象但无法言语。于是决定在看一篇,到9月份第二篇设计模式总于看完了,这一篇看完,脑子里面已经能够对绝大多数的设计模式能够说出其核心思想且可以画出类图也知道应用场景,算是一个进步,但可能还不能够特别熟练的使用,可能需要多多巩固和强化使用才能够完全理解设计模式的精髓所在。学习期...

互联网的修罗场 886

设计模式初探——六大设计原则

最近看了两本关于设计模式的书,在此记录一下感想。 第一次听说设计模式是在网上查询MVC模式的时候,顺便搜了一下设计模式,才了解到武林中存在着“23种设计模式”这么个东西。当时以为觉得设计模式就是倚天剑、屠龙刀,一个代码写的很烂的菜鸟看了设计模式就会成为“武林至尊”,代码水平立刻变得很厉害。学习了之后才知道我想错了,设计模式只是倚天剑和屠龙刀中的“九阴真经”,就算得到了还是要苦苦练习,结合实际的编...

yushuaigee的博客 331

设计模式 | 详解常用设计模式(六大设计原则,单例模式,工厂模式,建造者模式,代理模式)

设计模式是前辈们总结出的开发经验,是一系列用来解决特定问题的套路。它不是语法规范,而是帮助我们提升代码复用性、可维护性、可读性、稳健性以及安全性的一套方案。设计模式提供了一种优化代码的方式,通过标准化、模块化的设计,能够帮助我们提高系统的可维护性、可扩展性和可复用性。掌握这些设计模式和原则,将有助于开发高质量的代码,并且在实际开发中轻松应对复杂问题。🎯掌握设计模式= 更加优雅、灵活的编程!

mooridy的博客 1276

【设计模式】——六大设计原则

刚刚结束设计模式学习时,感觉哪哪的抓不住重点,虽然之前师傅给勾了写比较重要的设计模式,但是给我的感觉设计模式怎么全都一个样子。         通过对一些文章的浏览,简单的对设计原则总结了一下。        设计模式,就是设计范例。        是经典问题的解决方案,是可以让学习者举一反三的,有研究价值、有交流价值的例子。         设计模式的本质是面向对

王金龙 864
上一篇: 生产者消费者
下一篇: 集合
go_sparrow
博客等级 码龄11年 25粉丝 257原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值