Java学习(面向对象设计原则+重构原则+互联网未来发展趋势)

七大设计原则 1.1 开闭原则 开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类、模块和函数应该对扩展开放, 对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实 现扩展细节。可以提高软件系统的可复用性及可维护性。开闭原则,是面向对象设计中最基础的设计原 则。它指导我们如何建立稳定灵活的系统,例如:我们版本更新,我尽可能不修改源代码,但是可以增 加新功能。 在现实生活中对于开闭原则也有体现。比如,很多互联网公司都实行弹性制作息时间,规定每天工 作 阅读详情

微服务架构是入门级知识

  • 传统行业:使用SSM框架,数据库
  • 互联网企业:微服务架构,分布式系统开发,高可用,高并发,高性能
  • 面向对象编程思想:万物皆对象
  • 高内聚,低耦合

互联网

2020 5G普及
1.物联网会崛起
物物相连,连锁未连
2.大数据
不光是数据量大,更是维度广
3.数据挖掘
用户行为数据
ETL 工具:Kettle
商业的本质是盈利,赚钱,实现BI商业智能
4.AI 人工智能
5.区块链 本质就是一套分布式存储系统,异地多活分布式存储系统,就像一个数据库
6.云计算
用户体验:前端,由此产生
7.全栈工程师:拥有多种技能并能利用多种技能完成产品的人

这些都是基于分布式系统开发

图灵说:计算机的本质是,输入,输入

基础:计算机基础,计算机网络

感谢几位大神的优秀文章:

优快云夕虞大神【面向对象设计的七大设计原则详解】:
https://blog.youkuaiyun.com/qq_34760445/article/details/82931002#Law_of_Demeter_LoD_284
博客园鄙人薛某【面向对象六大设计原则】:https://www.cnblogs.com/yeya/p/10655760.html#%E9%87%8C%E6%B0%8F%E6%9B%BF%E6%8D%A2%E5%8E%9F%E5%88%99
博客园NaYonug大神【重构原则】:https://www.cnblogs.com/liuyoung/p/7819501.html

面向对象设计原则:

开口合里最单依:开闭原则,接口隔离原则,组合聚合原则,里氏替换原则,最少知道原则
单一职责原则

开放关闭原则(Open Closed Principle):

  • 是Java世界里最基础的设计原则
  • 原则:一个软件实体(模块,类,方法,函数)等应该对扩展开放,对修改关闭(封闭)
  • 当软件需要变化时,软件实体应尽量在不修改原有代码的情况下进行扩展
  • 扩展开放:
    某模块的功能是可扩展的,则该模块是扩展开放的。软件系统的功能上的可扩展性要求模块是扩展开放的。
  • 修改关闭:
    某模块被其他模块调用,如果该模块的源代码不允许修改,则该模块修改关闭的。软件系统的功能上的稳定性,持续性要求模块是修改关闭的。
遵循开闭原则的最好手段就是抽象:
  • 对软件系统中的不变的部分加以抽象,抽象成不变的接口,不变的接口可以应对未来的扩展;
  • 接口的最小功能设计原则,原有的接口要么可以应对未来的扩展;不足的部分可以通过定义新的接口来实现;
  • 设计之初需要考虑到未来所有可能发生变化的因素,比如未来有可能因为业务需要分成后台和前端的功能,这时设计之初就可以设计成两个接口,如果将来前端代码的业务发生变化,我们只需扩展前端接口的功能,或者修改前端接口的实现类即可,后台接口以及实现类就不会受到影响,这就是抽象的好处。
public interface BackCode{
    void writeCode();
}
public interface FrontCode{
    void writeCode();
}
  • 开放关闭原则的优点:
    稳定性。开闭原则要求扩展功能不修改原来的代码,这可以让软件系统在变化中保持稳定。
    扩展性。开闭原则要求对扩展开放,通过扩展提供新的或改变原有的功能,让软件系统具有灵活的可扩展性。遵循开闭原则的系统设计,可以让软件系统可复用,并且易于维护。

接口隔离原则(Interface Segregation Principle):

  • 原则:类之间的依赖关系建立在最小接口上,客户端依赖的接口尽可能小,不依赖它不需要的接口,解耦合。
    客户端需要什么接口就提供什么接口,把不需要的接口剔除掉,接口细化,保证接口纯洁性,建立单一的接口。
注意控制接口的粒度:
  • 接口不能太小,如果太小会导致系统中接口泛滥,不利于维护;
  • 接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来不方便

组合聚合原则(Composite/Aggregate Reuse Principle):

  • 尽量使用对象组合/聚合,不要使用类继承来达到复用的目的( 在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新对象通过向这些对象的委派达到复用已有功能的目的。)
  • 一般而言,如果两个类之间是"Has-A"关系应使用组合或聚合,如果是"Is-A"关系可使用继承。
  • 组合和聚合都是关联的特殊种类。

聚合表示整体和部分的关系,表示“拥有”。组合则是一种更强的“拥有”,部分和整体的生命周期一样。

组合的新的对象完全支配其组成部分,包括它们的创建和湮灭等。一个组合关系的成分对象是不能与另一个组合关系共享的。

组合是值的聚合(Aggregation by Value),而一般说的聚合是引用的聚合(Aggregation by Reference)。

在面向对象设计中,有两种基本的办法可以实现复用:第一种是通过组合/聚合,第二种就是通过继承。

只有当以下的条件全部被满足时,才应当使用继承关系:

1)派生类是基类的一个特殊种类,而不是基类的一个角色,也就是区分"Has-A"和"Is-A"。只有"Is-A"关系才符合继承关系,"Has-A"关系应当用聚合来描述。

2)永远不会出现需要将派生类换成另外一个类的派生类的情况。如果不能肯定将来是否会变成另外一个派生类的话,就不要使用继承。

3)派生类具有扩展基类的责任,而不是具有置换掉(override)或注销掉(Nullify)基类的责任。如果一个派生类需要大量的置换掉基类的行为,那么这个类就不应该是这个基类的派生类。

4)只有在分类学角度上有意义时,才可以使用继承。

组合/聚合优缺点:

优点:

1.新对象存取子对象的唯一方法是通过子对象的接口。
2.这种复用是黑箱复用,因为子对象的内部细节是新对象所看不见的。
3.这种复用更好地支持封装性。
4.这种复用实现上的相互依赖性比较小。
5.每一个新的类可以将焦点集中在一个任务上。
6.这种复用可以在运行时间内动态进行,新对象可以动态的引用与子对象类型相同的对象。
7.作为复用手段可以应用到几乎任何环境中去。
缺点: 就是系统中会有较多的对象需要管理。

继承优缺点:

优点:

新的实现较为容易,因为基类的大部分功能可以通过继承的关系自动进入派生类。
修改和扩展继承而来的实现较为容易。
缺点:

继承复用破坏封装性,因为继承将基类的实现细节暴露给派生类。由于基类的内部细节常常是对于派生类透明的,所以这种复用是透明的复用,又称“白箱”复用。

如果基类发生改变,那么派生类的实现也不得不发生改变。

从基类继承而来的实现是静态的,不可能在运行时间内发生改变,没有足够的灵活性。

里氏替换原则(Liskov Substitution Principle):

  • 原则:所有引用基类的地方,必须能透明地使用其子类的对象(如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有对象o1都替换成o2的时候,程序P的行为都没有发生变化,那么类型T2是类型T1的子类型)
    2.只要父类出现的地方,子类就可以出现,替换为子类也不影响。但是反之不行。
    3.核心是抽象,抽象又依赖于继承。建立抽象,通过抽象建立规范,具体的实现在继承时替换掉。往往和开闭原则一起,通过接口和抽象的方式

单一职责原则(Single Responsibility Principle):

  • 两个完全不一样的功能不能放在一个类中,一个类应该是一组相关性很高的函数、数据的封装
  • 永远不要让一个类存在多个改变的理由,只能让一个类/接口/方法有且仅有一个职责
  • 是实现高内聚、低耦合的指导方针,是最简单却最难运用的原则,需要设计人员发现类的不同职责并将其分离
  • 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中
  • 划分一个类的职责 因人而异,单一要根据个人的经验、具体的业务来定
  • 比如图片加载和缓存应该放在不同的类中
  • 单一职责原则的优点:
    类的复杂性降低,实现什么职责都有明确的定义;
    逻辑变得简单,类的可读性提高了,而且,因为逻辑简单,代码的可维护性也提高了;
    变更的风险降低,因为只会在单一的类中的修改。

依赖倒置原则(DIP):

1.原则:实现类直接不直接发生依赖关系,其依赖关系通过接口或抽象类产生,即:面向接口编程
2.java中,抽象指接口或抽象类,两者不能直接被实例化;细节是实现接口或继承抽象类的实现类,可以直接被实例化,new一个对象

迪米特原则(最少知道原则)(Law of Demeter )

概念理解):

重构原则:重改:改善既有代码设计

事不过三,三则重构

第6篇:面向对象编程重构系统 封装性:数据访问受控​可维护性:修改内部实现不影响外部复用性:Contact类可独立使用​扩展性:为后续继承多态打下基础。 阅读详情

相关推荐

Java架构师系统架构设计原则应用

目录 1 导语 2 如何设计高并发系统:局部并发原则 3 如何设计高并发系统:服务化与拆分 4 高可用系统有哪些设计原则? 5 如何保持简单轻量的架构-DRY、KISS,YAGNI原则 6 如何设计组件间的交互和行为-HCLC,CQS,SOC 7 框架层面的发展趋势-约定大于配置

赵广陆 1623

Java设计模式 -- 基本原则(重构示例)

Java设计模式 -- 基本原则 这两个星期开始系统地学习设计模式相关的知识,对每一个原则或者设计模式主要从下面几点分析学习: 定义:简单地描述其作用解决问题:说明该原则或设计模式解决什么限制条件下的问题。结构图:绘制相关例子的UML机构图。代码示例:通过一个例子解释该模式的实现方法。优缺点:该模式的局限性。 参考资料: 此次学习主要依赖于下面两个技术网站: 设计模式Java

IT匠人的博客 1321

深入理解面向对象设计:类关系与重构

本文深入探讨了面向对象编程中的类关系和重构技术。通过实例分析,解释了继承与对象组合的区别,并着重讲解了接口的作用和原理。同时,文章也讨论了如何通过提取方法、类和接口,以及重构设计来优化代码结构,提升系统的灵活性和可维护性。

weixin_28729843的博客 582

从面条到积木:面向对象代码重构指南

面向对象不是银弹,而是精心设计的乐高积木。通过本文的转换模式,开发者可以将面条代码重构成模块化的对象网络。记住:优秀的面向对象设计,应该像城市交通系统——每个对象都是智能的交通工具,通过清晰的接口和协议,共同构建高效运转的生态。重构启示录:代码的尽头不是面向对象,但面向对象是构建可维护系统的最佳起跑线。当你下次看到成群的全局变量和超长函数时,不妨拿起"类"这把瑞士军刀,开始你的重构之旅。

bill的博客 1053

深入解析SSD报错“READ FPDMA QUEUED”:从诊断到修复全流程

本文深入解析了SSD报错“READ FPDMA QUEUED”的含义、成因与全流程解决方案。该错误通常指示硬盘硬件或健康状态问题。文章详细介绍了如何通过系统日志定位错误、解读关键的S.M.A.R.T.健康报告(重点关注重分配扇区计数等指标),并逐步进行硬件排查(如更换SATA数据线)、软件修复与数据抢救,最终指导用户根据诊断结果做出维修或更换SSD的决策。

weixin_29233333的博客 400

Qt思岚激光雷达

Qt关于思岚激光雷达研究示例,本示例采用qt界面开发,可以串口也可以tcp进行设备连接。接收数据进行相关的数据进行绘图, 这种雷达可以用于大屏触摸场景,会场互动触摸场景开发。 #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QTimer> #include <QWidget> #include "lidarmgr.h" namespace Ui { class MainWidget; } class MainWidget.

cqltbe131421的博客 1598

如何面向对象做好重构?|83行代码

简介: 由阿里云云效主办的2021年第3届83行代码挑战赛已经收官。超2万人围观,近4000人参赛,85个团队组团来战。大赛采用游戏闯关玩儿法,融合元宇宙科幻和剧本杀元素,让一众开发者玩得不亦乐乎。本文作者:83行代码优秀参赛选手。

BYvonne的博客 232

ESP32C6+ESP-IDF5.2实战:基于RS485的ModbusRTU从站开发与调试

本文详细介绍了基于ESP32C6和ESP-IDF5.2开发ModbusRTU从站的实战指南。涵盖硬件连接、协议实现、ESP-Modbus库移植、寄存器映射及调试技巧,帮助开发者快速构建稳定可靠的工业级RS485通信节点,并解决常见通信故障。

play7的博客 1188

面向对象设计原则之开闭原则

如果需要修改系统的行为,无须对抽象层进行任何改动,只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有代码的基础上扩展系统的功能,达到开闭原则的要求。在该代码中,如果需要增加一个新的图表类,如折线图LineChart,则需要修改ChartDisplay类的display()方法的源代码,增加新的判断逻辑,违反了开闭原则。在本实例中,由于在ChartDisplay类的display()方法中针对每一个图表类编程,因此增加新的图表类不得不修改源代码。为了满足开闭原则,需要对系统进行抽象化设计,

smart_an的专栏 726

YOLOv8改进策略【卷积层】| CVPR-2023 部分卷积 PConv 轻量化卷积,降低内存占用

本文记录的是利用优化的目标检测方法研究。深度可分离卷积可以减少FLOPs,但会导致更高的内存访问,引起延迟并减慢整体计算。部分卷积利用逐点卷积处理通道冗余,减少模型计算量和内存访问量。Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks及其改进的实现代码如下: 四、创新模块 4.1 改进点⭐ 模块改进方法:直接加入(第五节讲解添加步骤)。模块加入如下:模块改进方法:基于的(第五节讲解添加步骤)。第二种改进方法是对中的进行改进,并将

Limiiiing的博客 1016

【Claude】SSL certificate verification 错误:证书校验失败与自定义 CA 配置

获取并验证企业 CA 证书后,需要配置 Claude Code(Node.js)信任该证书。Claude Code 的 SSL 错误通常源于企业代理:不是 Anthropic 服务器的问题Node.js 使用独立的 CA 存储:操作系统信任了企业 CA 不等于 Node.js 也信任NODE_EXTRA_CA_CERTS 是标准解决方案:指向包含企业 CA 的 PEM 文件绝不使用 NODE_TLS_REJECT_UNAUTHORIZED=0:这等于关闭所有 HTTPS 安全验证证书链完整性很重要。

博客 6811

The Principles of OOD 面向对象设计原则

本文首发于vivo互联网技术微信公众号 https://mp.weixin.qq.com/s/Q_pziBUhKRywafKeY2T7YQ 作者:Robert C. Martin 翻译:张硕 本文由来自美国业界大牛——Robert C. Martin(俗称“Bob大叔) 发布在 butunclebob.com 上,已获得翻译授权。 英文原文链接:http://butunclebob....

vivo互联网技术 394

ICM20948 DMP代码详解(69)

ICM20948 DMP代码详解(69)

phmatthaus的专栏 617

面向对象设计原则之接口隔离原则

在图1中,由于在接口CustomerDataDisplay中定义了太多方法,即该接口承担了太多职责,一方面导致该接口的实现类很庞大,在不同的实现类中都不得不实现接口中定义的所有方法,灵活性较差,如果出现大量的空方法,将导致系统中产生大量的无用代码,影响代码质量;在面向对象编程语言中,实现一个接口就需要实现该接口中定义的所有方法,因此大的总接口使用起来不一定很方便,为了使接口的职责单一,需要将大接口中的方法根据其职责不同分别放在不同的小接口中,以确保每个接口使用起来都较为方便,并都承担某一单一角色。

smart_an的专栏 664

【01】Python解释器的安装

工欲善其事必先利其器。君欲学PYthon,则必先安装Python解释器。安装过程相对简单,大致跟着如下步骤走即可。

侯小啾技术博客 1258

YOLOv11改进策略【模型轻量化】| 使用 MoblieOne 模块,引入结构重参数化,提高模型检测效率

本文记录的是基于MobileOne的YOLOv11骨干网络改进方法研究。MobileOne的基础模块通过重参数化,。在将其替换YOLOv11的骨干网络后,实现模型轻量化。

Limiiiing的博客 1425

面向对象设计原则之里氏代换原则

在本实例中,可以考虑增加一个新的抽象客户类Customer,而将CommonCustomer和VIPCustomer类作为其子类,邮件发送类EmailSender类针对抽象客户类Customer编程,根据里氏代换原则,能够接受基类对象的地方必然能够接受子类对象,因此将EmailSender中的send()方法的参数类型改为Customer,如果需要增加新类型的客户,只需将其作为Customer类的子类即可。里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此。

smart_an的专栏 858

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

翻译 | The Principles of OOD 面向对象设计原则

本文首发于vivo互联网技术微信公众号 https://mp.weixin.qq.com/s/Q_pziBUhKRywafKeY2T7YQ 作者:Robert C. Martin 翻译:张硕 本文由来自美国业界大牛——Robert C. Martin(俗称“Bob大叔) 发布在 butunclebob.com 上,已获得翻译授权。 英文原文链接:http://but...

weixin_30606669的博客 78

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

设计原则

文章目录前言开闭原则面向抽象编程coding 前言 设计原则有 开闭原则 依赖倒置原则 单一职责原则 接口隔离原则 迪米特法则 里氏替换原则 合成复用原则 每个原则都有自己的焦点,在我们实际开发过程中,讲究的是一个平衡,我们要考虑人力、时间、成本、资量、包括有些项目是有dealline的,还有业务的扩展性。如果一开始把扩展性做的特别特别完美的话,那成本又上来了。所以追寻设计原则也不要过度,在适...

weixin_44778952的博客 431

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

为什么越来越多的同学都想学Java?未来发展趋势怎么样?

当你踏进计算机世界的大门时,PHP、JavaScript、.Net、Python、C、C++、Ruby、Golang、Java等编程语言一定是不陌生的,这么多的编程语言可能让你有点眼花撩乱了,学哪一个好呢?下面和千锋广州小编一起来看看吧。 有的人觉得C语言是最好的,因为大学第一门课学的就是它呀;有的人觉得PHP语言是最好的,因为“PHP是世界上最好的语言”呀;有的人觉得C++是最好的,因为面向对象编程,从此有对象了啊。 然而我想说Java语言综合来说是最好的,正如术业有专攻,在某个特定的领域也有最适合的语言

weixin_43703144的博客 2095

互联网未来十年发展趋势

近些年来,中国互联网的发展可谓是日新月异, 彻彻底底颠覆了传统行业和人们的工作生活。未 来互联网会发展成什么样子,还站在现在的我们 可能还难以预测未来,正如十年前的人们不会想 到,不出门就能吃到外卖,甚至买到一切你想买 的东西。因此本文就和大家谈谈未来十年互联网 行业的发展前景和趋势。 互联网发展前景 至今为止,随着互联网产业2C的流量市场与商 业机会接近天花板,同时伴随着A、区块链、大 数据、云计算、5G等技术的发展与突破,技术 之间的相互取长补短实现了大数据作为生产资 料、算力作为生产力、区块链作为生产

weixin_63497480的博客 1万+

Java架构师必须知道的 6 大设计原则

作者:pdai www.cnblogs.com/pengdai/p/9151800.html 在软件开发中,前人对软件系统的设计和开发总结了一些原则和模式, 不管用什么语言做开发,都将对我们系统设计和开发提供指导意义。本文主要将总结这些常见的原则,和具体阐述意义。 开发原则 面向对象的基本原则(solid)是五个,但是在经常被提到的除了这五个之外还有 迪米特法则和合成复用原则等, 所以在常见的文章中有表示写六大或七大原则的; 除此之外我还将给出一些其它相关书籍和互联网上出现的原则; S单一职责.

Java技术栈,分享最主流的Java技术 1483

java七大设计原则(上)

Java设计原则开闭原则依赖倒置原则单一职责原则 开闭原则 开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类、模块和函数应该对扩展开放, 对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实 现扩展细节。可以提高软件系统的可复用性及可维护性。开闭原则,是面向对象设计中最基础的设计原 则。它指导我们如何建立稳定灵活的系统,例如:我们版本更新,我尽可能不修改源代码,但是可以增 加新功能。 在现实生活中对于开闭原则也有体现。比如,很多互联网

qq_18805199的博客 345
上一篇: python自学篇九[ 函数(四):递归函数+匿名函数+内置函数+高阶函数]
下一篇: python自学篇十[ 面向对象 (一) :面向对象概念+定义类+练习一]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值