面向对象的七种基本设计原则

面向对象的7种基本设计原则:

里氏替换原则
单一职责原则
依赖倒置原则
接口隔离原则
开放关闭原则
迪米特法则(最少知道原则)
合成复用原则

面向对象的3个基本要素:封装、继承、多态

1.里氏替换原则Liskov-Substituion Principle

核心思想为:子类可以替代父类出现的位置,而整个软件系统功能没有影响。

这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。同时,这一约束反过来则是不成立的,子类可以替换基类,但是基类不一   定能替换子类。

Liskov替换原则,主要着眼于对抽象和多态建立在继承的基础上,因此只有遵循了Liskov替换原则,才能保证继承复用是可靠地。

实现的方法是面向接口编程:将公共部分抽象为基类接口或抽象类,通过      Extract Abstract Class,在子类中通过重写父类的方法实现新的方式支持同样的职责。
 Liskov替换原则是关于继承机制的设计原则,违反了Liskov替换原则就必然导致违反开放封闭原则。
 Liskov替换原则能够保证系统具有良好的拓展性,同时实现基于多态的抽象机制,能够减少代码冗余,避免运行期的类型判别。

2.单一职责原则Single-Resposibility Principle

核心思想为:一个类,最好只做一件事,只有一个能引起它的变化

单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互 之间就产生影响,从而大大损伤其内聚性和耦合度。

通常意义下的单一职责,就是指只有一种单一功能,不要为类实现过多的功能点,以保证实体只有一个引起它变化的原因。

3.依赖倒置原则(Dependecy-Inversion Principle)

        核心思想是:依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。

 依赖一定会存在于类与类、模块与模块之间。当两个模块之间存在紧密的耦合关系时,最好的方法就是分离接口和实现:在依赖之间定义一个抽象的接口使得高层模块调用接口,而底层模块实现接口的定义,以此来有效控制耦合关系,达到依赖于抽象的设计目标。

抽象的稳定性决定了系统的稳定性,因为抽象是不变的,依赖于抽象是面向对象设计的精髓,也是依赖倒置原则的核心。

   依赖于抽象是一个通用的原则,而某些时候依赖于细节则是在所难免的,必须权衡在抽象和具体之间的取舍,方法不是一层不变的。依赖于抽象,就是对接口编程,不要对实现编程。

4.接口隔离原则(Interface-Segregation Principle)

 核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口。
 具体而言,接口隔离原则体现在:接口应该是内聚的,应该避免“胖”接口。一个类对另外一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法,这是一种接口污染。

接口有效地将细节和抽象隔离,体现了对抽象编程的一切好处,接口隔离强调接口的单一性

分离的手段主要有以下两种:

1、委托分离,通过增加一个新的类型来委托客户的请求,隔离客户和接口的直接依赖,但是会增加系统的开销。

2、多重继承分离,通过接口多继承来实现客户的需求,这种方式是较好的。

5.开放封闭原则(Open-Closed principle)

核心思想是:软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。

开放封闭原则主要体现在两个方面:

1、对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。

2、对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对其进行任何尝试的修改。

实现开开放封闭原则的核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,所以修改就是封闭的;而通过面向对象的继承和多态机制,又可以实现对抽象类的继承,通过覆写其方法来改变固有行为,实现新的拓展方法,所以就是开放的。

6.迪米特法则(最少知道原则)

一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。简单的说就是各个实体之间相互独立,互不干扰。

7.合成复用原则

原则是尽量使用合成/聚合的方式,而不是使用继承。

以上就是几个(七个)基本的面向对象设计原则,它们就像面向对象程序设计中的金科玉律,遵守它们可以使我们的代码更加鲜活,易于复用,易于拓展,  灵活优雅

不同的设计模式对应不同的需求,而设计原则则代表永恒的灵魂,需要在实践中时时刻刻地遵守。

时间: 2024-08-10 15:00:58

面向对象的七种基本设计原则的相关文章

面向对象的七种设计原则

下面的截图:主要讲述了七种设计原则定名称,定义以及使用的频率. ? 原则一:(SRP:Single responsibility principle)单一职责原则又称单一功能原则 核心:解耦和增强内聚性(高内聚,低耦合) 描述: 类被修改的几率很大,因此应该专注于单一的功能.如果你把多个功能放在同一个类中,功能之间就形成了关联, 改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题. 原则二:开闭原则(OCP:Open Closed Principle) 核心思想:

面向对象的5个基本设计原则

面向对象的3个基本要素:封装.继承.多态 面向对象的5个基本设计原则: 单一职责原则(Single-Resposibility Principle) 其核心思想为:一个类,最好仅仅做一件事,仅仅有一个引起它的变化.单一职责原则能够看做是低耦合.高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来降低引起变化的原因.职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互之间就产生影响,从而大大损伤其内聚性和耦合度.通常意义下的单一职责,就是指仅仅有一种单一功能,不要为类实

七种设计原则

七种设计原则 1.单一职责原则 单一职责原则(SRP:Single responsibility principle)又称单一功能原则 核心:解耦和增强内聚性(高内聚,低耦合). 描述: 类被修改的几率很大,因此应该专注于单一的功能.如果你把多个功能放在同一个类中, 功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题. 2.里氏替换原则 里氏替换原则(LSP:Liskov Substitution Principle) 核心: 在任何父类出现

面向对象的七个设计原则

一.单一职责原则 一个类,最好只做一件事,只有一个引起它的变化.单一职责原则可以看做是低耦合.高内聚在面向对象原则上的引申, 将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因.职责过多,可能引起它变化的原因就越多,这将 导致职责依赖,相互之间就产生影响,从而大大损伤其内聚性和耦合度.通常意义下的单一职责,就是指只有一种单一 功能,不要为类实现过多的功能点,以保证实体只有一个引起它变化的原因.专注,是一个人优良的品质:同样的,单 一也是一个类的优良设计.交杂不清的职责将使得代码看起来特

【转】面向对象的5条基本设计原则

本文转自:http://www.cnblogs.com/freeliver54/archive/2012/10/16/2725438.html 这几天重新看了一遍<大话设计模式>,发现果然有不同的感悟,而且自己也上网找了<敏捷软件开发—原则.模式与实践>一书来看,那本书的序言中有一段话我觉得很有道理:“美的东西比丑的东西创建起来更廉价,也更快捷.”设计一个软件不关要追求代码的优雅问题,更关乎生产成本等.技术大师们在对软件架构的研究中经历了很长时间的摸索,从面向过程到面向对象,从设计

0-序和面向对象的基本设计原则

最近在看<Head First设计模式>,真是一本好书,深入浅出,用具体的场景将常见的设计模式讲的很透彻.略有遗憾的是,这本书中的例子都是基于java写的,对我们这种写.Net来说看起来还是有些不过瘾.所以我把书中每个模式对应的例子用C#写了一遍,顺便对各个模式的思想和适用场景做了一些记录,对自己是一份笔记,希望对大家也能有所帮助. 在进入具体的设计模式之前,还是让我们重温一下面向对象的五个基本设计原则吧,真的是值得反复回味. 单一职责原则SRP(Single Responsibility P

Java设计模式的7种设计原则还有很多人不知道

前言 其实没有设计模式我们也能完成开发工作.但是为什么需要设计模式呢?让你看起来很牛,没错这个算一个.让你的代码层次感分明,可读性强而且容易维护.让你像我一样有更多的摸鱼划水时间. 可能有人说我一个类或者方法就干完的东西,你搞了七八个.当然使用设计模式也是要斟酌的.一些简单稳定的业务也不推荐使用设计模式.设计模式多用于复杂多变的业务或者要求适配性.扩展性更强的场景中.不要为了设计模式而设计模式. 接下来我们结合实际开探讨一下设计模式的一些原则. 1.开闭原则 public class Selle

面向对象的基本设计原则【转】

面向对象的3个基本要素:封装.继承.多态 面向对象的基本设计原则: 单一职责原则(Single-Resposibility Principle) 其核心思想为:一个类,最好只做一件事,只有一个引起它的变化.单一职责原则可以看做是低耦合.高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因.职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互之间就产生影响,从而大大损伤其内聚性和耦合度.通常意义下的单一职责,就是指只有一种单一功能,不要为类实现过多的功

面向对象的三个基本特征 和 五种设计原则

一.三个基本特征 面向对象的三个基本特征是:封装.继承.多态. 封装 封装最好理解了.封装是面向对象的特征之一,是对象和类概念的主要特性. 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 继承 面向对象编程 (OOP) 语言的一个主要功能就是"继承".继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 通过继承创建的新类称为"子类"或"