设计模式入门——初识及七大设计原则

Android Audio常见问题分析方法 分析audio dump,确定写给BT的data是否正常,MTK平台Android原生架构分析threadloop write节点,高通平台分析QXDM 1586节点,从dump确定问题大概位置。分析systrace 确定性能。AudioFocus状态(用于播放或者音量异常的情况)。AudioTrack是否正常创建bt连接是否正常通路异常,setMode,setSpeakerphoneOn等都会影响设备选择,sco调用流程是否正常。 阅读详情

设计模式的优点

1、可扩展性:当客户提出新业务要求,程序可在较小的改动下进行功能扩展,也可视为可维护性

2、可读性:代码具有编程规范性,便于阅读和理解,适合多人合作

3、可靠性:添加新功能对原有功能无影响

4、高内聚、低耦合:事实上这个特点是程序一直追求的

七大设计原则

1.单一职责原则

介绍:一个类只负责一个职责

应用:类A有职责1,职责2,职责1需求变更时,进行改动类A,由于职责2依赖于类A,就可能造成职责2执行错误。将类A分解成类A 1,类A 2解决问题,即满足单一职责原则

优点:降低类的复杂度,提高代码可读性、可维护性

注意:遵守该原则分解类本身就需要付出代价,因此,通常情况下我们遵守该原则,但在逻辑足够简单时可以将该 原则级别降低,不在类级别遵守单一职责,而在方法级别遵守单一职责。什么时候逻辑足够简单呢?比如职责1只需要一个方法时,只需要将职责1设计成一个方法而不需要设计成一个类。

2.接口隔离原则

介绍:用户不需要依赖它不需要的接口,一个类对另一个类的依赖应建立在最小接口上

应用:interface 1有五个接口,类A需要使用接口1、2、3,故通过interface 1创建实现类B,类C需要使用接口4、5,故通过interface 1创建实现类D。类B和类C都需要实现五个接口,但类B不需要实现接口4、5,而类D不需要实现接口1、2、3,故interface 1对他们来说不是最小接口。将interface 1拆分成有接口1、2、3的interface 2、有接口4、5的interface 3即解决问题,将接口隔离起来,即满足接口隔离原则。

错误案例
在这里插入图片描述
正确
在这里插入图片描述

3.依赖倒置原则

介绍:抽象不应该依赖具体,具体应该依赖抽象;中心思想是面向接口编程

应用:具体类A有一个接受信息行为,类B实现接受电子信息,类A直接依赖具体类B,B作为参数传入A,如果该行为新增实现类C,类C实现接受邮件信息,而具体类A要使用新实现,则具体类A也要添加新改动,即需要将 C作为参数传入A。如果将类B继承interface 1,接收信息行为设置为interface 1的规范(即接口1),接受类作为参数传入A,则添加新实现只需新增实现类C继承interface 1,而不需要改动A。

错误案例错误案例
正确正确

优点:相对于具体的多变性,抽象要稳定的多。使用接口或抽象类的目的是定好规范,具体的细节实现交给他们的实现类去解决。

依赖传递:三种传递方式:接口传递,构造器传递,setter方法传递

注意:

  • 低层模块尽量都有抽象的依赖。
  • 变量引用时(new 对象时),尽量都是抽象类或接口,这样,模块和变量的引用之间就有了一个缓冲区,便于程序的扩展和优化。
  • 继承时遵守里氏替换原则。
4.里氏替换原则

介绍:所有引用基类的地方必须能透明的(相当于直接替换)的使用其子类。遵守里氏替换原则,相当于要求子类尽量不要重写它的父类。

应用:定义父类Father和子类Son,他们有一个方法1。程序员A为了新功能将Son重写了方法1,程序员2使用Son的方法1,没有太注意,将方法1按照父类的定义来使用(因为一般看父类的注释不继续往下面看子类的),于是出现了bug。这时可以让Father和Son类继承一个更抽象的基类Base类,让Father和Son类继承Base类,重写的方法1放到Son类,原来的还是Father类。Father类想使用重写的方法1可以引入Son类

注意:继承实际上在一定程度上也让两个类有些耦合(父类修改时所有的子类会受到影响),适当情况下,可以通过聚合、组合和依赖的形式解决问题。

5.开闭原则

介绍:一个软件实体,如类、模块、函数应该对扩展开放(即提供方,新加的软件实体),对修改关闭(即使用方,原有的软件实体)。当变化时尽量通过扩展软件实体来实现要求,而不是修改已有细节。

应用:参考依赖倒置原则应用

注意:开闭原则是编程中最基础最通用的原则,编程中遵循其他原则以及使用设计模式即为了实现此原则

6.迪米特原则

介绍:一个类应该对另一个类保持最少的了解,只知道实现结果不需要知道过程,故又称“最少知道原则”。不论依赖的类内部逻辑多么复杂,尽量将其封装在自己内部,对外只提供方法,不泄露任何信息。

解析:此原则也就是只与最直接的朋友进行通信。类与类之间必然会有耦合关系,这种耦合可以称之为朋友。其中,称成员变量、方法参数、返回值中的类为最直接的朋友,而局部变量中的类不为直接朋友。陌生的类 最好不要以局部变量的形式出现在类的内部。

注意:

  • 迪米特原则核心是降低类之间的耦合
  • 迪米特原则只是降低类的耦合,不可能耦合完全消失
7.合成复用原则

介绍:尽量使用聚合/组合关系,而不是继承

应用:类A有抽象方法1,类B想使用方法1故而继承类A,然而当类A新增抽象方法2时类B就必须继承,增大耦合性。此时应该让B与A之间为组合/聚合关系。

设计模式类型

二十三种设计模式分类

三种类型具体模式
创建型单例模式、工厂模式、抽象工厂模式、原型模式、建造者模式
结构型适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
行为型模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、责任链模式(职责链模式)
Fluent验证案例03:管道中湍流流动压降计算——采用kw-sst模型计算压降更为准确。 阅读(4053) 评论(0)本案例利用Fluent计算管道中湍流流动压降。 阅读详情

相关推荐

ArcGIS学习记录—SHP文件转换为KML KMZ数据,并显示面要素相应的标注

使用相应软件操作获取KMZ数据得以下发到外业调查人员,使得矢量数据能够更显而易见,可视化,让外业人员的工作减轻许多。(过程步骤是借鉴于网络上的相关人士给的建议,根据这些建议自己做出来的步骤,可能有些粗略,有问题的话可以再进行探讨)...

qq_41046162的博客 5万+

【设计模式整合】20秒速记23种设计模式。设计模式7原则,UML类图。创建,结构,行为型。

设计模式7原则,UML类图。创建,结构,行为型。速记23种设计模式。

qq120631157的博客 811

NFC门禁卡复制全解析:从M1卡到UID卡的攻防实践

本文深入解析了NFC门禁卡的安全机制与攻防实践。从M1卡基于Crypto1算法的原理漏洞讲起,详细阐述了利用Proxmark3等工具进行侦听、破解密钥及使用UID卡进行复制的完整攻击链条。同时,为防御方提供了从升级CPU卡、启用全扇区认证到部署多因子验证的系统性防护策略,旨在帮助管理员构建更稳固的物理安全防线。

weixin_29182481的博客 1401

我终于读懂了设计模式的七大原则。。。

子类中尽量不要重写父类的方法分析我们发现原来运行正常的相减功能发生了错误。原因就是类 B 无意中重写了父类的方法,造成原有功能出现错误。在实际编程中,我们常常会通过重写父类的方法完成新的功能,这样写起来虽然简单,但整个继承体系的复用性会比较差。特别是运行多态比较频繁的时候通用的做法是:原来的父类和子类都继承一个更通俗的基类,原有的继承关系去掉,采用依赖,聚合,组合等关系代替.

编码人生 2万+

分析方法—temporal receptive field(TRF)

总结来说,时间感受野其实就是一个 filter!课程中的描述—.(使用时间感受野与刺激进行卷积来描述)时间感受野一般是听觉计算中使用的,在视觉中,有另一种分析叫做空间感受野(spatial receptive fields)。回归权重(Regression weights)是指在回归分析中用于估计自变量与因变量之间关系的权重或系数。回归分析是一种统计方法,用于建立自变量与因变量之间的关联模型,并通过拟合数据来估计模型中的参数。在简单线性回归中,只有一个自变量与一个因变量之间的关系被建模。

m0_51474171的博客 1603

Python实战:用NumPy实现LU分解与QR分解(附代码对比)

本文深入探讨了使用NumPy实现LU分解与QR分解的实战方法,通过代码对比分析了两种矩阵分解技术的原理、数值稳定性差异及核心应用场景。LU分解适用于高效求解线性方程组,而QR分解凭借其正交化特性,在求解最小二乘问题和处理病态矩阵时更具优势。文章提供了详细的Python代码示例,帮助开发者根据具体问题选择最合适的分解方法。

php55的博客 1212

【JAVA长虹键法】第一式 初识设计模式(23种设计模式)

设计模式第一期,初始设计模式。

4万+

Android Qcom USB Driver学习(五)

在前面的第二期中,我们知道一些非标的USB的充电类型Floatingcharger,其具有和普通DCP相似的大电流能力,但在最初检测的时候会限制Inputcurrentlimit到100mA,来进行检测是否是SDP类型,所以要支持大电流输入就需要进行vote操作,前面的几篇都有涉及,所以本文学习一下pmicusbcharger都相关的vote机制。...

Android驱动开发 2901

【JAVA长虹键法】第一式 初识设计模式(23种设计模式)_23种设计模式在软考中哪个最常用

【JAVA长虹键法】主要讲了23种设计模式,本系列专栏会以虹猫蓝兔七侠传的故事为例来给大家详细分析所有模式,希望能给大家带来帮助!初识设计模式无在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!大家看完有什么不懂的可以在下方留言讨论也可以关注。

2401_84519718的博客 749

告别U盘!在Ubuntu 22.04上从零搭建PXE网络装机服务器(支持UEFI/Legacy双启动)

本文详细介绍了在Ubuntu 22.04上搭建PXE网络装机服务器的完整流程,支持UEFI/Legacy双启动模式。通过配置DHCP、TFTP和HTTP服务,实现无需U盘的高效批量系统部署,解决传统安装方式的介质依赖、版本控制和时间成本问题,显著提升机房维护和设备部署效率。

weixin_42569329的博客 249

双Orin PCIe RC&EP模式互通

orin pcie 互通

乐于分享 3877

【设计模式】23种设计模式之初识

(1)UML是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果;(2)UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等。

javaScript1997的博客 333

【知识图谱】neo4j桌面版安装与配置-解决无法启功问题(2025年最新最全教程)

(经历过各种版本NEO4J,相比社区版而言,个人感觉桌面版更适合新手,安装调试更少更方便。如果是社区版改桌面版的,记得删除系统变量里NEO4J_HOME这个变量,否则会报错。

知识靠谱的博客 2万+

(狂神)初识设计模式笔记

了解设计模式 设计模式 是前辈们对代码开发经验的总结, 是解决特定问题的一系列套路, 他不是语法规定, 而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案 1995年,GoF合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了23种设计模式,从此树立了软件设计模式领域的里程碑,人称GoF设计模式 学习设计模式的意义 设计模式的本质是面向对象设计原则的实际运用, 是对类的封装性, 继承性和多态性以及类的关联关系和组合关系的充分理解 正确使用设计模式具有以下优点:

愿你拥有大风与烈酒,也能享受孤独与自由 2608

ssm框架搭建

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

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

初识Java设计模式

先看几个经典的面试题: 1)请使用UML类图画出原型模式核心角色 2)原型设计模式的深拷贝和浅拷贝是什么,并写出深拷贝的两种方式的源码(重写clone方法实现深拷贝、使用序列化实现深拷贝) 3)在Spring框架中哪里使用到了原型模式,并对源码进行分析 beans.xml <bean id="id01" class="com.ma.spring.bean.Monster" scop...

young_1004的博客 279

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

面向对象设计原则是什么

1. 面向对象设计原则 1.1 可维护性较低的软件设计 过于僵硬 过于脆弱 复用率低 黏度过高 1.2 一个好的系统设计 可扩展性 灵活性 可插入性 复用:一个软件的组成部分可以在同一个项目的不同地方甚至在不同的项目重复使用。 面向对象设计复用的目标:实现支持可维护性的复用。(抽象、继承、封装、多态) 重构:在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能、使其程序的...

在职后端开发工程师的学习笔记 52

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

[5-01-02].第01节.初识设计模式 - 设计模式概述

[5-01-02].第01节.初识设计模式 - 设计模式概述

F-T-er 919

初识设计模式

了解设计模式 设计模式 是前辈们对代码开发经验的总结, 是解决特定问题的一系列套路, 他不是语法规定, 而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案 1995年,GoF合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了23种设计模式,从此树立了软件设计模式领域的里程碑,人称GoF设计模式 学习设计模式的意义 设计模式的本质是面向对象设计原则的实际运用, 是对类的封装性, 继承性和多态性以及类的关联关系和组合关系的充分理解 正确使用设计模式具有以下优点: 可以提高程序

ડUN的博客 498

设计模式——初识

模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。 对于面向对象软件系统的设计而言,在支持可维护性地同时,提高系统的可复用性是个至关重要的问题,如何同时提高一个软件系统的可维护性和 可复用性是面向对象设计需要解决的核心问题之一。在面向对象设计中,可维护性的复用是以设计原则为基础的。 面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方...

qq_23018459的博客 215

初识面向对象设计--七大原则概述

面向对象设计有以下几种原则1.开闭原则 Open-Close Principle(OCP) 2.里氏替换原则 Liskov Substitution Principle(LSP) 3.单一职责原则 Single Responsibility Principle(SRP) 4.接口隔离原则 Interface Segregation Principle(ISP) 5.依赖倒置原则 Depend

Sizon的专栏 1616

c++ 设计模式介绍与基本原则

模式:在一定环境中解决一些问题的方案(通俗点讲就是:特定环境用固定的套路解决问题)设计模式是一套反复被人使用,多数人知晓的,经过分类编目的代码设计经验的总结设计模式就是固定的、写代码的一种思维逻辑方式,设计类与类之间关系的时候,抽象思维的一种定式设计模式最终的目的为了应对变化,提高代码的复用和重用性,减少代码的修改去应对变化客户需求的变化技术平台变化开发团队的变化市场环境的变化... ...创建型模式通常和对象创建有关,设计到对象实例化的方式(5种)工厂模式抽象工厂模式建造者模式原型模式单例模式结构型模式描

weixin_60569662的博客 550

GoF23种(部分)软件设计模式【核心理解】

设计模式复习 1. 面向对象设计原则 1.1 可维护性较低的软件设计 过于僵硬 过于脆弱 复用率低 黏度过高 1.2 一个好的系统设计 可扩展性 灵活性 可插入性 复用:一个软件的组成部分可以在同一个项目的不同地方甚至在不同的项目重复使用。 面向对象设计复用的目标:实现支持可维护性的复用。(抽象、继承、封装、多态) 重构:在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性...

在职后端开发工程师的学习笔记 254

Pome资料库 之 问答题C++

Pome资料库 之 问答题C++

lyk0308140的专栏 895

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 284

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 346

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 126
下一篇: HashMap源码分析(JDK1.8)
荼锦AI编程
博客等级 码龄7年 198粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值