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种是开闭原则的一些具体实现。
相关推荐
【学习笔记】软件工程、算法与架构:数据结构与算法、设计模式、软件架构、协同开发、质量保障QA.zip 【学习笔记】软件工程、算法与架构:数据结构与算法、设计模式、软件架构、协同开发、质量保障QA.zip 【学习笔记...
Java架构面试专题寒冬包含了丰富的Java技术面试问题及答案,是准备Java架构师职位面试的宝贵资源。这份资料旨在帮助求职者...这些内容涵盖了Java开发中的核心技术和最佳实践,是成长为一名优秀的Java架构师的必经之路。
这份名为“Java最全的架构笔记(共六百多页).zip”的压缩包文件,显然是一个详尽的Java架构学习资源,包含了多个专题系列,旨在帮助开发者深入理解和掌握Java技术栈及其在大规模系统中的应用。以下是根据描述中提到...
Java架构面试专题汇总包含了丰富的Java开发和架构设计的知识点,是准备Java架构师面试或提升技术能力的重要资源。...通过深入学习和实践,可以更好地理解和应用这些知识,成为一名出色的Java架构师。
1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,通过抽象工厂接口,避免了客户端与具体产品类之间的耦合。在实际应用中,例如,数据库连接的创建,我们可以使用工厂模式来创建...
架构师需要理解如何在分布式系统中有效地使用缓存,以及缓存的设计模式和最佳实践。 ### Kafka、Zookeeper Kafka是一种分布式消息系统,它被设计用来处理大量数据,并具备良好的水平扩展性和高吞吐量。Zookeeper是...
还包括了对单例模式和模版方法模式的讨论,这两种设计模式在实际开发中非常实用。二维数组和对象数组、单例模式和模版方法模式也在这一部分进行了详细讲解。 五、JavaSE核心II 继续深入Java标准版核心内容,该部分...
在这个"java学习"的压缩包中,"butte-java-note-master"可能是一个包含Java相关学习资料的项目,可能涵盖了上述所有知识点的详细教程或笔记。通过深入学习和实践,开发者可以全面提升自己的Java技能,从基础知识到...
### 设计模式总结笔记 #### 一、概述 设计模式是一种在特定上下文中解决软件设计问题的方案。它并不是一种现成的代码片段或者框架,而是一种指导思想,帮助开发者理解如何更好地组织代码来解决问题。设计模式可以...
9. **设计模式**:常见的23种设计模式,如单例、工厂、观察者等,它们在实际开发中的应用场景。 10. **网络编程**:TCP和UDP协议,Socket编程基础,以及HTTP协议的理解。 除了这些基础知识,Java校招学习笔记可能...
以上只是Java架构面试中部分可能涉及的知识点,具体的学习笔记和答案会更加详细地解释每个概念,提供实践案例和解决思路,帮助读者巩固理论知识并提升实战技能。对于希望在Java架构领域深造的开发者来说,这是一个...
- **设计模式**:如单例、工厂、建造者、装饰器、代理等23种设计模式的使用场景和实现方式。 3. **并发编程**: - **线程与进程**:线程的概念、状态转换、同步与互斥,以及线程池的使用。 - **并发工具类**:如...
2. **MVC设计模式**:为了实现清晰的代码结构,项目很可能采用了Model-View-Controller(MVC)设计模式。Model负责数据处理,View负责显示,Controller处理用户交互,这有助于提高代码的可维护性和扩展性。 3. **...
Java架构面试专题涵盖了Java开发语言的核心知识、高级特性、并发编程、内存管理、垃圾收集、JVM优化、设计模式、框架应用、数据库交互、微服务架构等多个方面,这些都是面试中常被问到的关键点。本专题旨在帮助Java...
总之,《软件设计师软考笔记》压缩包为考生提供了一套全面的学习资料,涵盖了软考软件设计师所需的知识点,结合博主的笔记和设计模式表格,相信能有效助力考生顺利通过考试,成为一名合格的软件设计师。
《基于Springboot的学生读书笔记共享系统》是一款利用Java技术栈,特别是Springboot框架,结合SSM(Spring、SpringMVC、MyBatis)体系和JSP(JavaServer Pages)前端展示,实现的学生读书笔记交流与分享平台。...
* CS-Notes:Java学习笔记,涵盖了Java的基础知识、数据结构、算法、设计模式等。 * advanced-java:Java高级教程,涵盖了Java的高级知识、Java设计模式、Java框架和工具等。 Java实战 * miaosha:Java电商项目,...