软件设计模式七大原则的含义附举例说明

设计模式(面向对象)有七大原则,分别是:

  1.开放-封闭原则

  2.单一职责原则

  3.依赖倒转原则

  4.迪米特法则(也称为最小知识原则)

  5.接口隔离原则

  6.合成/聚合复用原则

  7.里氏代换原则

开放-封闭原则具有理想主义的色彩,他是面向对象设计的终极目标。其他几条则可以看做是开放-封闭原则的实现方法。设计模式就是实现了这些原则,从而达到了代码复用,增加可维护性的目的。

.开放-封闭原则

  概念:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。模块应该尽量在不修改原代码的情况下进行扩展。

  在软件周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给代码引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。当软件需求变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有代码来实现变化。

  开放封闭原则是面向对象设计的核心所在,遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该仅对程序中呈现的频繁变化的那些部分作出抽象,然而,对于应用程序中的每个部分都刻意的进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。

  注意事项:

  1.通过接口或者抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法。

  2.参数类型、引用对象尽量使用接口或者抽象类,而不是实现类

  3.抽象层尽量保持稳定,一旦确定不允许修改。

.单一职责原则

  概念:就一个类而言,应该仅有一个引起它变化的原因。

  当我们在做编程的时候,很自然的回个一个类加上各种各样的功能。这样意味着,无论任何需求要来,你都需要更改这个类,这样其实是很糟糕的,维护麻烦,复用不可能,也缺乏灵活性。如果一个类承担的职责过多,就等于把这些职责耦合起来,一个职责变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭到很多意想不到的破坏。

.依赖倒转原则

  概念:依赖倒转原则是程序要依赖于抽象接口,不要依赖于具体实现。简单的来说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块的耦合。

  有时候为了代码复用,一般会把常用的代码写成函数或类库。这样开发新项目的时候直接用就行了。比如做项目的时候大多要访问数据库,所以我们把访问数据库的代码写成了函数。每次做项目去调用这些函数。那么问题来了,我们要做新项目的时候,发现业务逻辑高层模块都是一样的,但客户却希望使用不同的数据库或存储方式,这时就出现了麻烦。我们希望能再次利用这些高层模块,但是高层模块都是与低层的访问数据库绑定在一起,没办法复用这些高层的模块。所以不管是高层模块和底层模块都应该依赖于抽象,具体一点就是接口或者抽象类,只要接口是稳定的,那么任何一个更改都不用担心。

  注意事项:

  1.高层模块不应该依赖于低层模块。两个都应该依赖抽象。

  2.抽象不应该依赖结节。细节应依赖于抽象。

.迪米特法则(也称为最小知识原则)

  概念:一个软件实体应当尽可能的少与其他实体发生相互作用。每一个软件单位对其他软件单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。迪米特法则不希望类之间建立直接的联系。如果有真的需要建立联系的,也希望能通过他的友元类来转达。因此,应用迪米特法则有可能造成一个后果就是:系统中存在大量的中介类,这些类之所以存在完全是为了传递类之间的相互关系,这在一定程度上增加了系统的复杂度。

.接口隔离原则

  概念:客户端不应该依赖他不需要的接口,类间的依赖关系应建立在最小的接口上。

  接口隔离原则的核心定义,不出现臃肿的接口,但是“小”是有限度的,首先就是不能违反单一职责原则。

.合成/聚合复用原则

  概念:合成/聚合复用原则经常又叫做合成复用原则,就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过这些对象的委派达到复用已有功能的目的。他的设计原则是:要尽量使用合成/聚合,尽量不要使用继承。

.里氏代换原则

  概念:里氏代换原则是面向对象设计的基本原则之一。即任何基类可以出现的地方,子类一定可以出现。里氏代换原则是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受影响时,基类才能被真正复用,而衍生类也能够在积累的基础上增加新的行为,里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。在基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

  当满足继承的时候,父类肯定存在非私有的成员,子类肯定是得到了父类的这些非私有成员(假设,父类的成员全部是私有的,那么子类没办法从父类继承任何成员,也就不存在继承的额概念了)。既然子类继承了父类的这些非私有成员,那么父类对象也就可以在子类对象中调用这些非私有成员。所以,子类对象可以替换父类对象的位置。

  在里氏带环原则下,当需求有变化时,只需继承,而别的东西不会改变。由于里氏代换原则才使得开放封闭称为可能。这样使得子类在父类无需修改就可以扩展。

原文地址:https://www.cnblogs.com/shenya/p/9661417.html

时间: 2024-10-25 17:08:48

软件设计模式七大原则的含义附举例说明的相关文章

图解Java设计模式之设计模式七大原则

图解Java设计模式之设计模式七大原则 2.1 设计模式的目的 2.2 设计模式七大原则 2.3 单一职责原则 2.3.1 基本介绍 2.3.2 应用实例 2.4 接口隔离原则(Interface Segregation Principle) 2.4.1 基本介绍 2.4.2 应用实例 2.5 依赖倒转原则 2.5.1 基本介绍 2.5.2 应用实例 2.6 里氏替换原则 2.6.1 OO中的继承性的思考和说明 2.6.2 基本介绍 2.6.3 一个程序引出的问题和思考 2.6.4 解决方法 2

设计模式七大原则(一)开闭原则

设计模式七大原则--开闭原则 1.1 定义: 一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 用抽象构建框架,用实体扩展细节. 1.2 优点: 提高软件系统的可复用性及可维护性. 1.3 问题由来: 在软件的生命周期中,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码进过重新测试. 1.4 解决方案: 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化. 实现

软件设计七大原则

软件设计的七大原则 设计模式遵循的一般原则: 1.开-闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开发,对修改关闭.说的是,再设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展.换言之,应当可以在不必修改源代码的情况下改变这个模块的行为,在保持系统一定稳定性的基础上,对系统进行扩展.这是面向对象设计(OOD)的基石,也是最重要的原则. 2.里氏代换原则(Liskov Substitution Principle,常缩写为.LSP)(1).由B

设计模式—七大原则

设计模式的目的 设计模式是为了解决程序的耦合性.内聚性.以及可维护性.可扩展性.重用性.灵活性.(1)代码的重用性:相同功能的代码,不用多次编写.(2)可读性:编程规范性,便于其他程序员的阅读和理解.(3)可扩展性:当需要增加新的功能时,非常的方便.(4)可靠性:当那个我们增加新的功能后,对原来的功能没有影响.使程序呈现高内聚,低耦合的特性. 单一职责原则: 对类来说,一个类应该指负责一项职责,如类a负责两个不同的职责:职责1,职责2.当职责1的需求变更而改变a时,可能造成职责2的执行错误,所以

设计模式七大原则之开闭原则学习

这是在我大学学习过程中,老师给我讲的第一个设计原则:开闭原则,至今为止,我只记住了一句话:程序对修改关闭,对扩展开放.接下来得好好理解一下这句话 一.开闭原则 开闭原则是编程中最基础.最重要的设计原则 基本介绍: (1)一个软件实体如类,模块和函数应该对扩展开放(对于提供方来说),对修改关闭(对于使用方来说).用抽象构建框架,用实现扩展细节. (2)当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化. (3)编程中遵循其它原则,以及使用设计模式的目的就是遵

设计模式七大原则(理解手打,不是复制)

1.单一原则:一个类只负责一个功能领域的相应职责 2.开闭原则:对修改关闭,对扩展开放 3.里氏替换原则:使用一个基类的引用,可以透明的替换成其子类 4.接口隔离原则:应该依赖于多个专门的接口,而不是依赖一个总的接口 5.依赖反转原则:抽象不依赖于细节,细节依赖于抽象 6.组合复用原则:多使用对象组合,而不是使用继承达到复用的目的 7迪米特原则:一个软件实体应尽量减少与其他实体的相互作用

软件设计七大原则之开闭原则

开闭原则: 对于一个软件实体如类,模块和函数应该对扩展开放,对修改关闭. 实际意义:软件的变化不应该通过修改已有的代码来实现变化. 实现手段:用抽象构建框架,用实现扩展细节 优点:提高软件系统的可复用性及可维护性 案例Coding: 课程类拥有id.name.原有价格.并通过实现ICourse接口去构建方法 Test:将课程相关信息输出 此时的类结构图为: 清晰简洁的类结构图,类和接口实现了依赖关系 此时当有打折活动时,我们需要对课程的价格进行打折,并要求输出打折价跟原价.首先我们会想到在原有的

设计模式七大原则之迪米特法则

迪米特法则:一个软件实体应当尽可能少的与其他实体发生相互作用 如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就会尽力少的影响其他模块,扩展会相对容易.这是对软件实体之间通信的限制.迪米特法则要求限制软件实体之间通信的宽度和深度.迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系. 迪米特法则还有几种定义形式:不要和“陌生人”说话,只与你的直接朋友通信等.在迪米特法则中,对于一个对象,其“朋友”包括以下几类: (1)当前对象本身(this) (2)以参数形式传入到当前对象方

《Java设计模式》七大原则

最近几年来,人们踊跃的提倡和使用设计模式,其根本原因就是为了实现代码的复用性,增加代码的可维护性.设计模式的实现遵循了一些原则,从而达到代码的复用性及增加可维护性的目的,设计模式对理解面向对象的三大特征有很好的启发,不看设计模式,很难深层地体会到面向对象开发带来的好处 .在刚开始学习中,很难做到将这些模式融汇贯通,所以这个需要我们在编码前多思考,等想充分了,在开始实践编码.下面是设计模式应当遵循的七大原则 1.开闭原则(Open Close Principle) 定义:一个软件实体如类.模块和函