码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象七大原则。

时间:2018-01-14 21:22:10      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:创建   media   重载   隔离   展开   独立   状态   class   图片   

面向对象设计七大原则

 技术分享图片

1. 单一职责原则(Single Responsibility Principle)

每一个类应该专注于做一件事情。

核心:解耦和增强内聚性(高内聚,低耦合)。

描述:类被修改的几率很大,因此应该专注于单一的功能。

如果你把多个功能放在同一个类中,功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题。

简而言之,SRP就是指单个类应该有且仅有单个职能。

2. 里氏替换原则(Liskov Substitution Principle)

超类存在的地方,子类是可以替换的。

四层含义:

(1)子类必须完全实现父类的方法。在类中调用其他类是务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了LSP原则。

(2)子类可以有自己的个性。子类当然可以有自己的行为和外观了,也就是方法和属性

(3)覆盖或实现父类的方法时输入参数可以被放大。即子类可以重载父类的方法,但输入参数应比父类方法中的大,这样在子类代替父类的时候,调用的仍然是父类的方法。即以子类中方法的前置条件必须与超类中被覆盖的方法的前置条件相同或者更宽松。

(4)覆盖或实现父类的方法时输出结果可以被缩小。

      LSP俗语是:“老鼠的儿子会打洞。”,其实就是子类是和父类有相同的行为和状态,是可以完全替换父类的。这也是保护了OCP的开放扩展关闭修改的原则。

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

实现尽量依赖抽象,不依赖具体实现。

依赖注入原则的核心思想就是:要依赖于抽象,不要依赖于具体的实现。它的英文缩写是DIP,英文全称是Dependence Inversion Principle。

其实依赖注入原则的意思就是:在应用程序中,所有的类如果使用或依赖于其他的类,则都应该依赖于这些其他类的抽象类,而不是这些其他类的具体实现类。抽象层次应该不依赖于具体的实现细节,这样才能保证系统的可复用性和可维护性。为了实现这一原则,就要求开发人员在编程时要针对接口编程,而不针对实现编程。 

依赖注入解除了对象和对象的依赖关系,需要其他对象,会有外部直接注入,而你自己不需要关心他如何而来。对象符合OCP原则(对外扩展开放,对修改关闭), 容器负责所有关系匹配。在此层,容器便是这个社会的规则,而对象只需要关心自己所完成的一部分。

三种实现方式:

 1、通过构造函数传递依赖对象;2、通过setter方法传递依赖对象 ;3、接口声明实现依赖对象

在Java中的表现:

(1)模块间的依赖是通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;

(2)接口或抽象类不依赖于实现类;

(3)实现类依赖接口或抽象类。

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

应当为客户端提供尽可能小的单独的接口,而不是提供大的总的接口。

接口隔离原则的定义

第一种定义:客户端不应该依赖它不需用的接口。

第二种定义:一个类对另外一个类的依赖性应当是建立在最小的接口上的。

接口分以下两种:

对象接口(Object Interface)Java中声明的一个类,通过new关键字产生的一个实例,对一个类型事物的描述,也是一种接口。

类接口(Class Interface)通过关键字Interface定义的接口。

分离接口的两种实现方法:

(1)使用委托分离接口。(Separation through Delegation)

就把请求委托给别的接口的实现类来完成需要的职责,就是适配器模式(Adapter)。

(2)使用多重继承分离接口。(Separation through Multiple Inheritance。)

该方法通过实现多个接口来完成需要的职责。

两种方式各有优缺点,通常我们应该先考虑后一个方案,如果涉及到类型转换时则选择前一个方案。

5. 迪米特法则(Law Of Demeter)

又叫最少知识原则,一个软件实体应当尽可能少的与其他实体发生相互作用。

 

在将迪米特法则运用到系统的设计中时,应注意的几点:

① 在类的划分上,应该创建有弱耦合的类;

② 在类的结构设计上,每一个类都应当尽量降低成员的访问权限;

③ 在类的设计上,只要有可能,一个类应当设计成不变类;

④ 在对其他类的引用上,一个对象对其它对象的引用应当降到最低;

⑤ 尽量降低类的访问权限;

⑥ 谨慎使用序列化功能;

优点:

<1>迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。

<2>遵循迪米特法则会使一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接关联

缺点:

<1>会在系统里造出大量的小方法,散落在系统的各个角落。这些方法仅仅是传递间接的调用,因此与系统的商务逻辑无关,当设计师试图从一张类图看出总体的框架时,这些小的方法会造成迷惑和困扰。

<2>会造成系统的不同模块之间的通信效率降低,也会使系统的不同模块之间不容易协调。

 

设计模式中的应用:

<1>门面模式(Facade Pattern)

<2>中介模式(Mediator Pattern)

⑦ 不要暴露类成员,而应该提供相应的访问器(属性)

面向对象七大原则。

标签:创建   media   重载   隔离   展开   独立   状态   class   图片   

原文地址:https://www.cnblogs.com/matianpeng/p/8279867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!