面向对象设计原则

来源:互联网 发布:ubuntu repair 编辑:程序博客网 时间:2024/06/06 02:39

面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则.
设计模式都是7大设计模式的具体实现,如下图
这里写图片描述

3中设计模式

创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。
创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。

结构型模式(Structural Pattern)描述如何将类或者对 象结合在一起形成更大的结构,就像搭积木,可以通过 简单积木的组合形成复杂的、功能更为强大的结构。
结构型模式可以分为类结构型模式和对象结构型模式:
类结构型模式关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。 - 对象结构型模式关心类与对象的组合,通过关联关系使得在一 个类中定义另一个类的实例对象,然后通过该对象调用其方法。 根据“合成复用原则”,在系统中尽量使用关联关系来替代继 承关系,因此大部分结构型模式都是对象结构型模式。

行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。
行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象 之间的交互。在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能,一个对象在运行时也将影响到其他对象的运行。

单一职责原则

一个类只负责一个功能领域中的相应职责-高内聚

开闭原则

软件实体应对扩展开放,而对修改关闭

里氏代换原则

核心增加扩展性.多态.
所有引用基类对象的地方能够透明地使用其子类的对象(父类可以转化成子类)
在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。例如:我喜欢动物,那我一定喜欢狗,因为狗是动物的子类;但是我喜欢狗,不能据此断定我喜欢动物,因为我并不喜欢老鼠,虽然它也是动物。
由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。
如果对每一个类型为T1的对象O1,都有类型为T2的对象O2,使得以T1定义的所有程序P在所有的对象O1都代换成O2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。

依赖倒转原则

抽象不应该依赖于细节,细节应该依赖于抽象

接口隔离原则

使用多个专门的接口,而不使用单一的总接口
每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。
在使用接口隔离原则时,我们需要注意控制接口的粒度,接口不能太小,如果太小会导致系统中接口泛滥,不利于维护;接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来很不方便。
核心是适量,增加扩展性,用户根据需求选择的实现一部分接口,如果太大就需要实现很多无用的方法没有必要.如果接口太小,增加了很多接口,也不利于维护

合成复用原则

尽量使用对象组合,而不是继承来达到复用的目的

迪米特法则

一个软件实体应当尽可能少地与其他实体发生相互作用
迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。
不要和“陌生人”说话、只与你的直接朋友通信
减少对象的没必要交换,如果需要,增加一个功能管理类,个各对象的关系通过公共管理类调用控制.

原创粉丝点击