接口隔离原则详解--七大面向对象设计原则(4)



接口隔离原则的来源:

  类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。因为使用多个专门的接口比使用单一的总接口要好,所以便提出了接口隔离原则。

接口隔离原则的目的:

  将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。

接口隔离原则的两种定义:

   (1) 当把“接口”理解成一个类型所提供的所有方法特征的集合的时候,这就是一种逻辑上的概念,接口的划分将直接带来类型的划分。可以把接口理解成角色,一个接口只能代表一个角色,每个角色都有它特定的一个接口,此时,这个原则可以叫做“角色隔离原则”。

(2) 如果把“接口”理解成狭义的特定语言的接口,那么ISP表达的意思是指接口仅仅提供客户端需要的行为,客户端不需要的行为则隐藏起来,应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口。在面向对象编程语言中,实现一个接口就需要实现该接口中定义的所有方法,因此大的总接口使用起来不一定很方便,为了使接口的职责单一,需要将大接口中的方法根据其职责不同分别放在不同的小接口中,以确保每个接口使用起来都较为方便,并都承担某一单一角色。接口应该尽量细化,同时接口中的方法应该尽量少,每个接口中只包含一个客户端(如子模块或业务逻辑类)所需的方法即可,这种机制也称为“定制服务”,即为不同的客户端提供宽窄不同的接口。

接口隔离原则的示例:

  未按照接口隔离原则设计的如图1所示,类A依赖接口I中的方法1、方法2、方法3,类B是对类A依赖的实现。类C依赖接口I中的方法1、方法4、方法5,类D是对类C依赖的实现。对于类B和类D来说,虽然他们都存在着用不到的方法。但由于实现了接口I,所以也必须要实现这些用不到的方法。

        

  按照接口隔离原则对原先设计进行拆分,将原有的接口I拆分为三个接口,拆分后的设计如图2所示:

               

接口隔离原则的使用总结:

(1).在实际系统设计中,使接口尽可能小,但是也不能太小,太小就会使得接口太多,难以维护。接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来很不方便。根据自己系统大小,合理控制接口。

(2).根据依赖接口的类选择方法,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。

(3).提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。

时间: 2024-12-16 16:16:53

接口隔离原则详解--七大面向对象设计原则(4)的相关文章

依赖倒置原则详解--七大面向对象设计原则(3)

依赖倒置原则来源: 类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成.这种场景下,类A一般是高层模块,负责复杂的业务逻辑:类B和类C是低层模块,负责基本的原子操作:假如修改类A,会给程序带来不必要的风险. 依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现.简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合. A.高层模块不应该依赖低层模块,二者都应该依赖其抽象.抽象

里氏替换原则详解--七大面向对象设计原则(2)

里氏替换原则来源: 我们都知道面向对象有三大特性:封装.继承.多态.所以我们在实际开发过程中,子类在继承父类后,根据多态的特性,可能是图一时方便,经常任意重写父类的方法,那么这种方式会大大增加代码出问题的几率.比如下面场景:类C实现了某项功能F1.现在需要对功能F1作修改扩展,将功能F1扩展为F,其中F由原有的功能F1和新功能F2组成.新功能F由类C的子类C1来完成,则子类C1在完成功能F的同时,有可能会导致类C的原功能F1发生故障.这时就有人提出了里氏替换原则.里氏替换原则这项原则最早是在19

单一职责原则详解--七大面向对象设计原则(1)

单一职责原则来源: 定义:单一职责就是一个类负责一项职责.就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因. 所谓职责,我们可以理解为功能,就是设计的这个类功能应该只有一个,而不是两个或更多.也可以理解为引用变化的原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑撤分这个类了.因为职责是变化的一个轴线,当需求变化时,该变化会反映类的职责的变化. 单一职责原则,很太简单.大多数开发人员,在设计软件时也会自觉的遵守这一重要原则,因为这是常识.在软件编程中,谁也不希望因为修改了一

迪米特法则详解--七大面向对象设计原则(6)

迪米特法则的来源: 迪米特法则又叫最少知道原则,最早是在1987年由美国Northeastern University的Ian Holland提出.类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大.于是就提出了迪米特法则.通俗的来讲,就是一个类对自己依赖的类知道的越少越好.也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息. 迪米特法则的简单定义:     只与直接的朋友通信. 首先来解

七大面向对象设计原则

一.面向对象原则综述 七大原则总脉络图: 二.常用的面向对象设计原则包括7个,这些原则并不是孤立存在的,它们相互依赖,相互补充. . 三.以下详细分析: (一)单一职责原则(Single Responsibility Principle, SRP) 1.定义:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中    或者:就一个类而言,应该仅有一个引起它变化的原因. 2.分析:一个类(或者大到模块,小到方法)承担的职责越多,它被复用的可能性越小,而且如果一个类承担的职责过多,就相当于

程序员七大面向对象设计原则

在没有了解到面向对象设计的7大原则前,我只是一只豆子!   但豆子终将会成长不是吗? 1.开闭原则:一个软件实体应当对扩展开放,对修改关闭.也就是说在所涉及一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现在不修改源代码的情况下改变这个模块的行为. 在开闭原则的定义中,软件实体可以指一个软件模块.一个由多个类组成的局部结构或一个读库的类. 抽象化是开闭原则的关键. 是添加新代码完成方法的重构  而不是修改源代码 声明: 本文源自 2.依赖倒转原则:高层模块不应该依赖低层模块,他们

7大面向对象设计原则

面向对象设计原则 一.概述 针对软件的可维护性和可复用性,知名软件大师Robert C.Martin认为一个可维护性(Maintainability) 较低的软件设计,通常由于如下4个原因造成:过于僵硬(Rigidity) ,过于脆弱(Fragility) ,复用率低(Immobility) ,黏度过高(Viscosity) .软件工程和建模大师Peter Coad认为,一个好的系统设计应该具备如下三个性质:可扩展性(Extensibility) ,灵活性(Flexibility),可插入性(P

【OOAD】面向对象设计原则概述

软件的可维护性和可复用性 知名软件大师Robert C.Martin认为一个可维护性(Maintainability) 较低的软件设计,通常由于如下4个原因造成:? 过于僵硬(Rigidity) ? 过于脆弱(Fragility) ? 复用率低(Immobility) ? 黏度过高(Viscosity) 软件工程和建模大师Peter Coad认为,一个好的系统设计应该具备如下三个性质:? 可扩展性(Extensibility) ? 灵活性(Flexibility)? 可插入性(Pluggabil

6大设计原则详解(一)

1. 单一职责原则(SRP) (1)概念 单一职责原则的定义是:应该有且只有一个原因引起类的改变,即一个类只负责一个职责. 比如让类C负责两个不同的职责:职责P1,P2.当由于职责P1需求发生改变而需要修改类C时,有可能会导致原本运行正常的职责P2功能发生故障. (2)举例 关于用户管理的一个类按如下类图来设计: 很显然,用户的属性和行为没有分开,按照单一职责原则,应该将其重新拆封成两个接口:用户属性接口IUserBO,用户行为接口IUserBiz. 分清职责之后的代码如下: ...... IU