单一职责原则
所谓单一职责原则,指的是,一个类应该仅有一个引起它变化的原因。
这里变化的原因就是所说的“职责”,如果一个类有多个引起它变化的原因,那么也就意味着这个类有多个职责,再进一步说,就是把多个职责耦合在一起了。
这会造成职责的相互影响,可能一个职责的变化,会影响到其他职责的实现,甚至引起其他职责随着变化。
开闭原则
开闭原则讲的是一个软件实体应当对扩展开放,对修改关闭。
这个原则说的是, 在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。换言之,应当可以在不必修改源代码的情况下改受这个模块的行为。
通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活件。 已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化小的软件系统有一定的稳定性和延续性。
解决问题的关键在于抽象化。在向对象的编程语言里面,可以给系统定义出一个一劳永逸、不再更改的抽象设计,此设计允许有无穷无尽的行为实现。
里氏代换原则
里氏代换原则的严格表达是:一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能察觉出基类对象和子类对象的区别。
里氏代换原则是继承复用的基石。只有当衍生类可以替换掉基类,软件单位的功能不会受到影响时,基类才能真正被复用,而衍生类也才能够在基类的基础上增加新的行为。
依赖倒转原则
在面向对象的系统里面,两个类之间可以发生三种不同的耦合关系:
–零耦合关系:如果两个类没有耦合关系,就称之为零耦合。
–具体耦合关系:具体耦合发生在两个具体的(可实例化的)类之间,经出一个类对另外一个具体类的直接引用造成。
–抽象耦合关系:抽象耦合关系发生在一个具体类和一个抽象类之间,使两个必须发生关系的类之间存有最大的灵活性。
简单地说,依赖倒转原则要求客户端依赖于抽象耦合。
接口隔离原则
一个接口对应一个角色,而不是多个角色。如果客户端仅仅需要某一些方法的话,那么就应当向客户端提供这些方法,而不要提供不需要的方法。
这个原则用来处理那些比较庞大的接口,这种接口通常会有交的的操作声明,涉及到很多的职责。在使用这样的接口时,通常会有很多不需要的方法,这就是一种接口污染,因此,这样的接口应当被分离,按照不同的需求分离成不同的接口。
迪米特原则
在软件系统中,一个模块设计得好不好的标志,就是该模块在多大的程度上将自己的内部数据和其他与实现有关的细节隐藏起来。一个设计得好的模块可以将它所有的实现细节隐藏起来,这样一来,模块与模块之间就可以仅仅通过彼此的API相互通情。
这一概念就是“信息的隐藏”,或者叫做“封装”,也就是大家熟悉的软件设计的基本教义之一。信息的隐藏非常重要的原因在于,它可以使各个子系统之间脱耦。这种脱耦化可以有效地加快系统的开发过程,因为可以独立地同时开发各个模块。它可以使维护过程受得容易,因为所有的模块都容易读懂,特别是个必担心对其他模块的影响。
一旦确认某一个模块是性能的障碍时,设计人员可以到对这个模块本身进行优化,而不必担心影响到其他的模块。信息的隐藏可以促进软件的复用。一个系统的规模越大,信息的隐藏就越是重要,而信息隐藏的威力也就越明显。
分享到:
相关推荐
在面向对象编程中,设计模式基于一些基本原则,这些原则构成了良好设计的基础。本篇将深入探讨23种设计模式以及面向对象的基本原则。 面向对象的基本原则主要包括: 1. 单一职责原则(Single Responsibility ...
本书“国外经典教材数据结构与算法——面向对象的C++设计模式”深入探讨了如何使用面向对象编程思想来构建高效、可维护的数据结构和算法。面向对象编程(Object-Oriented Programming, OOP)以其封装、继承和多态等...
数据结构与算法是计算机科学的基础,而面向对象的C++设计模式则是软件工程中的核心概念。这个主题结合了这两者,旨在提供一个深入理解如何在实际编程中有效地组织和优化数据的方法。 首先,数据结构是关于如何存储...
总结来说,这本书是面向C++程序员的一份宝贵资源,它深入探讨了设计模式的理论与实践,通过具体的案例分析,帮助读者掌握面向对象设计的核心原则。无论是初学者还是经验丰富的开发者,都可以从中受益,提升自己的...
这些模式的合理应用能够让软件设计更加符合面向对象的原则,使系统具备更好的可扩展性和可维护性。 #### 第五部分:小颗粒度基础模式和应用案例 这部分主要介绍了一些小规模的设计模式以及它们在实际项目中的应用...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体类。这种模式的主要目的是为了隔离产品对象的创建和使用,使得系统对产品类的依赖降低到最低,同时也方便了产品的扩展和...
工厂方法模式是面向对象设计模式中的一种,它属于创建型模式,主要解决的是当系统需要创建的对象具有多种类型,而具体创建哪种类型的对象在运行时才能确定的问题。在这个压缩包中,`FactoryMethod`可能包含了Java...
在《设计模式——约会版》这一独特视角下探讨的设计模式,并非我们传统意义上的面向对象设计模式(如工厂模式、单例模式等),而是通过模拟约会场景,将抽象的设计原则与实际生活中的互动策略相结合,以此来形象地...
《UML和模式应用——面向对象分析与设计导论(第三版)》是一本深入探讨UML(统一建模语言)以及面向对象分析与设计的权威著作。在信息技术领域,UML作为一种可视化建模语言,是软件开发过程中的重要工具,而面向...
《设计模式:面向对象程序设计C#版》一书揭示了在软件开发中,面对客户需求变化的挑战,如何借助面向对象的设计模式来提高代码的可维护性、复用性和扩展性。作者通过类比古代活字印刷术的四大优势——可维护、可复用...
- **框架与库**:了解Spring、Hibernate等Java开发框架,以及它们如何利用面向对象原则。 - **测试驱动开发**(TDD):先编写测试,再编写满足测试的代码,确保代码质量。 通过这份资料,你可以逐步掌握面向对象...
面向对象(Object-Oriented,OO)是一种编程思想,它基于现实世界中的对象来构建软件系统,强调数据和操作数据的方法结合在一起,形成一个独立的单元——对象。面向对象编程的核心概念包括封装、继承和多态,这三大...
标题"设计模式可复用面向对象软件的基础"直接揭示了本文要探讨的核心——设计模式在构建可复用面向对象软件中的关键作用。设计模式不是具体的代码或库,而是一种通用解决方案的模板,它描述了在特定上下文中,当遇到...
**面向对象设计(OOD)与设计模式** 面向对象设计(Object-Oriented Design,简称OOD)是软件开发中的一种常用方法,它强调将现实世界的问题转化为计算机程序中的类和对象,以便更好地理解和处理复杂性。OOD的核心...
在编程世界中,Java设计模式是面向对象编程领域的一个重要概念,它为解决常见的软件设计问题提供了可重用的解决方案。对于新手来说,设计模式可能显得深奥难懂,但它们实际上是经验丰富的开发者用来提高代码质量、可...