以下大部分内容摘抄自阎宏博士的《JAVA与模式》一书的第二部分,部分加入了本人的一些理解。
设计原则
上篇说道了“开闭原则”和“里氏替换原则”,下面继续:
3.依赖倒转原则(Dependence Inversion Principle)
要依赖于抽象,不要依赖于具体。
或者说:要针对接口编程,而不要针对实现编程。
这条原则主要是判断具体类有变化的需求,所以依赖抽象可以让具体类去变化。
当然这里也有一个度的把握,当某些特殊类是相当稳定的、不会发生辩护的,则客户端也可以依赖于此具体类,而不必故意去发明一个抽象类型。
4.接口隔离原则(Interface Segregation Principle)
多个专门的接口比使用单一的接口要好,从客户端类的角度来讲,一个类对另一个类的依赖性应该建立在最小接口上的。
反过来说:过于臃肿的接口设计是对接口的污染(Interface Contamination).
5.合成/聚合复用原则
要尽量使用合成/聚合,尽量不要使用继承。
首先区分下聚合和合成的关系:
a)聚合关系(Aggregation):关联的一种,是整体和个体之间的关系,无法通过语法分别,是逻辑判断得出的。
b)合成关系(Composition)也是关联的一种,但比聚合关系更强。具体有2点:一是要求整体对象负责部分对象的生命周期;二是要求不分对象不能共享(即合成关系不能被共享)
使用合成/聚合关系有如下优点:(缺点是有较多的对象需要管理)
a)隐藏了成分对象的细节
b)可以在运行时,改变成分对象。
c)这种复用支持包装,这里我(马背)的理解是对成分对象的方法进行调用时候,可以加入一些逻辑。
d)所需依赖较少,指类之间的依赖关系,因为没有继承无关的方法,所以无需依赖这些方法所依赖的二类
f)新对象存取成分对象的唯一方法是通过成分对象的接口。
老实说,这点我(马背)没有理解很好,估计是这样的意思:一是成分对象可以要求成抽象的接口,这样能够依赖于抽象而不是具体实现。
相对的,滥用继承关系有如下缺点:
a)将父类的内容细节暴露给子类
b)如果超类发生改变,子类也被强制改变
c)关系是静态的,运行时候能改变,缺乏灵活性。
这条原则的掌握需要我们明确分析对象之间是“has-A”还是"Is-A"的关系。
6.迪米特法则(Law of Demeter) 或者叫做最少知识原则(Least Knowledge Principle)
一个对象应该对其他对象有尽可能少的了解。可以从狭义和广义两个角度来理解。
狭义的迪米特法则:要求一个对象如果不必与其他对象直接通讯,最好能通过其他对象将调用转发(call forwarding),典型的模式:门面模式(Facade)和调停者模式(Mediator),这二者都通过中间对象降低了调用者和其他对象的耦合度。
广义的迪米特法则:主要体现在对象之间、包之间、模块之间,将本身的数据和实现隐藏起来
1)优先考虑将一个类设置为不变类
2)尽量降低一个类的访问权限
3)谨慎使用Serializable
4)降低成员的访问权限
5)限制局部变量的有效范围
分享到:
相关推荐
《2023下半年软考中级软件设计师试题及答案解析》是针对全国计算机技术与软件专业技术资格(水平)考试(简称“软考”)中级软件设计师科目的重要参考资料。软考是中国信息技术领域的一项权威认证,旨在考核应试者在...
9. 软件概要设计模板的设计原则:软件概要设计模板的设计原则包括简洁性、可读性、可维护性和可扩展性等。 10. 软件概要设计模板的应用场景:软件概要设计模板的应用场景包括软件开发项目管理、软件测试、软件维护...
在第四版中,作者们全面更新了原有的内容,引入了最新的技术趋势和设计理念,旨在帮助读者掌握软件设计的核心概念、方法和技术。标签“软件设计师”明确了本书的主要受众,即那些致力于成为优秀软件设计专业人士的...
### 软件工程中的软件设计原则与模式教程 #### 第1章 软件设计原则的重要性 在软件工程领域,软件设计原则是构建高质量软件系统的基础。这些原则旨在指导开发者设计出健壮、可维护且易于扩展的系统。本章节重点...
结构设计原则是软件设计中的一种重要原则,旨在确定软件的模块结构和模块之间的关系。结构设计原则包括以下几个方面: 1. 模块化原则:将软件划分成小的、独立的模块,以便于软件的开发和维护。 2. 抽象原则:使用...
在软件工程的学习中,软件设计与体系结构占据了至关重要的地位。复习这部分内容时,我们需要理解并掌握以下几个关键知识点: 1. **软件工程层次**:软件工程从底层到高层的顺序是质量关注点、过程、方法、工具。这...
软件设计师是信息技术领域中的一个重要角色,他们负责设计、开发、测试以及维护软件系统,确保软件的质量、性能和安全性。 上午的试题通常会更加注重理论知识和基础技能的考核,包括但不限于以下几点: 1. 计算机...
以下是对给定文件中提及的几个类设计原则的深入探讨。 ### 1. 单一职责原则 单一职责原则强调一个类应该专注于实现单一的功能或职责。当一个类承担了过多的职责时,其复杂性会显著增加,导致维护困难。例如,如果...
首先,软件设计师的考试通常涵盖以下几个核心知识点: 1. **软件工程基础**:这是软件设计师的基础知识,包括软件生命周期、需求分析、系统设计、编码、测试和维护等阶段。考生需要理解并掌握每个阶段的关键任务和...
技术架构设计原则是在构建软件系统时所要遵循的一系列理念和规则,其目的是为了确保系统能够顺利地扩展和维护,同时满足性能、安全、稳定性等方面的要求。在设计技术架构时,有几大核心原则需要特别关注:大道至简、...
《软考中级-软件设计师》是一套全面针对国家计算机技术与软件专业技术资格(水平)考试中级软件设计师科目的备考资源。这个压缩包包含了教材、大纲和历年真题解析,为考生提供了一条清晰的学习路径。 首先,我们来...
首先,我们来深入理解软考中软件设计师这一级别的考试内容。该考试主要考察以下几个方面的知识: 1. **计算机基础知识**:涵盖计算机系统结构、操作系统原理、数据结构与算法、数据库系统等基础知识,这些都是软件...
《软件设计与体系结构》是一门深度探讨软件开发核心概念的课程,主要关注软件系统的设计原则、模式以及架构。这门课程旨在帮助开发者理解和实践高效、可维护的软件设计,从而构建出高质量的软件产品。在课程中,我们...
面向对象设计原则主要包括以下几点: 1. **单一职责原则(SRP)**:一个类应该只有一个引起它变化的原因。这意味着每个类应专注于一项任务,避免将多个职责混杂在一起。在员工工资计算的例子中,`Employee`类只负责...
软件设计师是信息技术领域中的一个重要角色,他们负责设计、开发和维护软件系统,是技术创新与应用的关键力量。 此电子书的涵盖内容可能包括以下几个核心知识点: 1. **软件工程基础**:这部分通常涉及软件生命...
架构设计的基本原则包括但不限于以下几点: 1. **可扩展性**:设计应允许系统随着业务增长而扩展,而不引起大规模重构。 2. **松耦合**:组件之间应保持低依赖,便于修改和替换。 3. **高内聚,低耦合**:模块内部...
软件设计模式总复习的知识点非常丰富,涵盖了软件设计目标、面向对象的原则、设计原则和设计模式等多个方面。 一、软件设计目标 软件设计目标主要包含以下几个方面: 1. 正确性:软件的功能需求能否得到正确实现。...
软件设计师,作为一个专业的IT认证,通常涉及到以下几个关键知识点: 1. **软件工程基础**:包括软件开发过程模型(如瀑布模型、敏捷开发等)、需求分析、软件设计原则、软件质量保证和测试方法等。考生需要理解...
软件开发中的数据库设计是软件系统的核心组件之一,对于软件系统的正确运行和高效开发至关重要。下面是软件开发数据库设计文档范例的详细知识点: 一、引言 数据库设计是软件开发中不可或缺的一部分,对于软件系统...