1.架构中的设计原则:
1.1.单一职责原则
单一职责原则的核心思想就是:系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成。英文缩写SRP Single Responsibility Principle
单一职责原则——》“高内聚,低耦合”,每个类应该只有一个职责,此外只能提供一种功能,而引起类变化的原因应该只有一个。在设计模式中,所有的设计模式都遵循这一原则。
1.2.里氏替换原则
里氏替换原则的核心思想就是:在任何父类出现的地方都可以用它的子类替代。
英文缩写:LSP Liskov Substitution Principle
里氏替换原则——》同一个继承体系中的对象应该有共同的行为特征 。
在里氏替换原则中,所有引用基类的地方必须能够透明地使用其子类对象 。也就是,只要父类出现的地方,子类就能够出现,而且替换为子类不会产生任何错误或异常。反过来,子类出现的地方,替换为父类就可能出现问题。
有4层含义:
(1)子类必须完全实现父类的方法
(2)子类可以有自己的特性
也就是说再类的子类上,可以定义其他的方法或属性。
(3)覆盖或者实现父类的方法时输入参数可以被放大,反之则不行
(4)覆写或者实现父类的方法时输出结果可以被缩小
1.3.依赖注入原则
依赖注入原则的核心思想就是:要依赖于抽象,不要依赖于具体实现。它的英文缩写DIP Dependence Inversion Principle(依赖反转原则)。
依赖注入原则——》在应用程序中,所有的类如果使用或依赖于其他的类,则都应该依赖于这些其他的类的抽象类,而不是这些其他类的具体实现类。抽象层次应该不依赖于具体的实现细节,这样才能保证系统的可复用性和可维护性。为了实现这一原则,就要求开发人员在编程时针对接口编程,而不针对实现编程。
依赖注入原则有如下三点说明:
1.高层模块不应该依赖底层模块,两者都应该依赖于抽象(抽象类或接口)
2.抽象(抽象类或接口)不应该依赖于细节(具体实现类)。
3.细节(具体实现类)应该依赖抽象。
依赖注入原则的本质是通过抽象(抽象类或接口)使各个类或模块的实现彼此独立,不互相影响,实现模块间的松耦合。这个原则是6个原则中最难实现的了,若果没有实现这个原则,也就意味着开闭原则(对扩展开放,对修改关闭)也无法实现。
依赖注入原则用如下三种方式实现。
(1)通过构造函数传递依赖对象
例如在构造函数中的需要传递的参数是抽象类或接口的方式实现。
(2)通过setter方法传递依赖对象。
即在我们设置的setXXX方法中的参数为抽象类或接口,来实现传递依赖对象
(3)接口声明实现依赖对象
1.4.接口分离原则
接口分离原则核心思想就是:不应该强迫客户程序依赖它们不需要使用的方法。
英文缩写ISP,Interface Segregation Principle。
接口分离原则——》一个接口不需要提供太多的行为,一个接口应该只提供一种对外的功能,不应该把所有的操作都封装到一个接口中。
接口分两种:
(1)对象接口
Java中声明的一个类,通过new关键字产生的一个实例,它是对一个类型的事务的描述,这也是一种接口。
(2)类接口
这种接口是通过关键字interface定义的接口。
接口分离原则要求的是在一个模块中应该只依赖它需要的接口,以保证接口的小纯洁。而且需要保证接口应该尽量小,即设计接口的时候让接口尽量细化,不要定义太臃肿的接口。
单一职责原则要求的是类和接口职责单一,注重的是职责,是业务逻辑上的划分。而接口分离原则要求的是接口的方法尽量少,针对一个模块尽量有用。
接口分离原则的规范:
(1)接口尽量小:主要是为了保证一个接口只服务于一个子模块或者业务逻辑。
(2)接口高内聚:接口高内聚是对内高度依赖,对外尽可能隔离。即一个接口内部声明的方法相互之间都与某一个子模块相关,且是这个子模块必需的。
(3)接口设计是有限度的:如果完全遵循接口分离原则的话,会出现一个问题,即接口的设计力度越来越小,这样就造成了接口数据剧增,系统复杂度一下子增加了,而这不是真实项目所需要的,所以在使用这个原则的时候,还要在特定的项目中,根据经验或者尝试去判断,但没有一个固定的标准。
1.5.迪米特原则
迪米特原则LOD Law of Demeter.
迪米特原则的核心思想就是:一个对象应当对其他对象尽可能少地了解。意思就是降低各个对象之间的耦合,提高系统的可维护性。在模块之间,应该只通过接口通信,而不理会模块的内部工作原理,它可以使各个模块耦合程度降到最低,促进软件的复用。
迪米特原则的核心观念就是类间解耦,弱耦合。只有弱耦合了以后,类的复用性才可以提高。
在应用迪米特法则时的注意事项如下:
1.在类划分上,应该创建有弱耦合的类。
2.在类的结构设计上,每一个类都应当尽量降低成员的访问权限。
3.在类的设计上,只要有可能,一个类应当设计成不变的类。
4.在对其他类的引用上,一个对对象对其他对象的引用应当降到最低。
5.尽量降低类的访问权限。
6.谨慎使用序列化功能。
7.不要暴露类成员,而应该提供相应的访问器(属性)
1.6.开闭原则
开闭原则缩写OCP Open for Extension,Closed for Modification
开闭原则的核心思想是:一个对象对扩展开放,对修改关闭。
开闭原则的意思就是:对类的改动是通过增加代码进行的,而不是改动现有的代码,也就是说,软件开发人员一旦写出了可以运行的代码,就不应该去改变它,而是要保证它能一直运行下去,如何才能做到呢?需要借助于抽象和多态,即把可能变化的内容抽象出来,从而使抽象的部分是相对稳定的,而具体的实现层则是可以改变和扩展的。
根据开闭原则,改变软件时,应通过扩展的方式来实现软件的改变,而不应靠修改原有代码来实现变化。
开闭原则是前5种原则的一个抽象总结,前5种是开闭原则的一些具体实现。
相关推荐
去掉了EJB 2.x、JSF等无用内容或过时内容,补充了数据结构和算法、大型网站技术架构、设计模式、UML、Spring MVC等内容并对很多知识点进行了深入的剖析,例如hashCode方法的设计、垃圾收集、并发编程、数据库事务等...
设计模式和常用的设计模式.mp4 │ Java面试题16.http get post请求的区别.mp4 │ Java面试题17.说说你对Servlet的理解.mp4 │ Java面试题18.Servlet的生命周期.mp4 │ Java面试题19.forward和redirect的区别.mp4 │ ...
本课程最贴合企业级需求的java基础课程,向上有完整的知识点覆盖,除了语言自身,数据结构、算法、设计模式、框架思想,多领域实现;向下,生动清晰阐述JVM原理,内存管理,垃圾回收算法,系统调用,多线程及...
Java集合面试题解析,并发编程高级面试解析,JVM常问高频题解析,Spring高级面试解析,MyBatis高级面试解析,Dubbo面试问题解析,RabbitMQ知识点汇总,数据库知识点汇总,设计模式知识点笔记汇总,常见面试算法题...
设计模式最佳实践: 《Redis 设计与实现》参考: 社区 book list 互联网的四大特征: 开放的精神,分享的心态,全球化的眼光,责任感。 —— 马云 Java: 深入理解Java虚拟机 第二版,周志明 码出高效-Java开发手册, ...
2:设计模式与架构 part 3:编程语言 & 前端 & 机器学习 C++笔记 part 4: 数据结构与算法 part 5: 笔试/面试 part 6:专业基础 输入URL到页面加载完成的过程 part 7:读书笔记 thinking in java effective java ...
java学生宿舍管理系统 源码 目录 c socket css golang base beego bolt confd etcd geecache gin gmq grpc influxdb ...java ...微服务学习笔记系列 ...数据结构和算法 ...架构模式 ...设计模式 目录自动生成器
Essential .NET 读书笔记 [第一部分] NET FrameWork的Collections支持 .NET的反射在软件设计上的应用 关于跨程序集的反射 实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述...
java程序员面试宝典、java程序员的基本修养、大话设计模式只看了重要的 )、测试相关(软件测试的艺术、从菜鸟到测试架构师、软件测试技术大全、selenium,qtp,junit的一些相关资料和书)、linux看了一点(鸟哥的...
编程文档【JVM、Java基础、设计模式、结构算法、架构设计、Spring框架、中间件、大数据、数据库、Linux、数据服务】
超过1000本的计算机经典书籍、个人笔记资料以及...书籍资源包括C/C++、Java、Python、Go语言、数据结构与算法、操作系统、后端架构、计算机系统知识、数据库、计算机网络、设计模式、前端、汇编以及校招社招各种面经~
书籍资源包括C/C++、Java、Python、Go语言、数据结构与算法、操作系统、后端架构、计算机系统知识、数据库、计算机网络、设计模式、前端、汇编以及校招社招各种面经~
3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。 答:public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static ...
设计模式 数据结构 数据库 算法 UML建模 Windows程序设计 数学篇 概率论与数理统计 微积分 线性代数 张量 机器学习篇 机器学习 pytorch sklearn TensorFlow 参考 欢迎个位,把那些占位符的地方补充完整。 仅供参考,...
书籍资源包括C/C++、Java、Python、Go语言、数据结构与算法、操作系统、后端架构、计算机系统知识、数据库、计算机网络、设计模式、前端、汇编以及校招社招各种面经~ 码云地址: gitHub地址: 欢迎 star、fork,哈哈...
java8 集合源码分析 Java 内存模型 并发/多线程 类加载 垃圾回收 Android UI 生命周期 ...ActivityManagerService ...设计模式 代理模式 装饰者模式 架构 MVVM 组件化 JavaScript Linux 版本控制 实战
java8 集合源码分析 目录 记录Java的学习轨迹. 工程化专题 设计模式 分布式架构 Java核心技术卷一 Spring (前四篇是学习笔记) Spring Boot 系列 面试相关 算法 资料
高级java笔试题 感谢大家的关注与支持,最近工作上比较忙,一直没有抽出时间来更新~ 8月份终于赶在最后几天把性能优化补全了,结构方面还会再优化...设计模式 Gradle 计算机网络基础 常见面试算法题 Java 知识点汇总
设计模式汇总 Gradle知识点汇总 计算机网络基础 常见面试算法题汇总 Contanct Me 如果觉得看起来比较麻烦,需要PDF版本,或是需要更多学习资料,都可以加上QQ群领取。祝愿每一位有追求的Android开发同胞都能进大厂拿...
JAVA架构师 :love_letter: 数据库 MySQL Oracle :laptop: Linux :artist_palette: 前端 前端基础知识 :open_book: 内功修炼 :grinning_face_with_big_eyes: 这里不知道写点什么。 算法 Algorithm :lemon: 本节的每个...