设计模式学习--面向对象的5条设计原则之接口隔离原则--ISP

一、ISP简介(ISP--Interface Segregation Principle):

使用多个专门的接口比使用单一的总接口要好。 一个类对另外一个类的依赖性应当是建立在最小的接口上的。 一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。

“不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。”这个说得很明白了,再通俗点说,不要强迫客户使用它们不用的方法,如果强迫用户使用它们不使用的方法,那么这些客户就会面临由于这些不使用的方法的改变所带来的改变。

二、举例说明:

参考下图的设计,在这个设计里,取款、存款、转帐都使用一个通用界面接口,也就是说,每一个类都被强迫依赖了另两个类的接口方法,那么每个类有可能因为另外两个类的方法(跟自己无关)而被影响。拿取款来说,它根本不关心“存款操作”和“转帐操作”,可是它却要受到这两个方法的变化的影响。

那么我们该如何解决这个问题呢?参考下图的设计,为每个类都单独设计专门的操作接口,使得它们只依赖于它们关系的方法,这样就不会互相影了!

三、实现方法: 1、使用委托分离接口 2、使用多重继承分离接口

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏积累沉淀

Java设计模式(七)----装饰模式

装饰模式 一、概述 二、装饰模式的结构 三、具体案列 四、装饰模式与类继承的区别...

1917
来自专栏java一日一条

一个基于Java的开源URL嗅探器

今天,我们很高兴做一个分享,因为我所在的 Linkedin 公司 开源了我们做的一个ULR探测工具:URL-Detector Java 库。

392
来自专栏子勰随笔

接口设计六大原则

1523
来自专栏计算机视觉与深度学习基础

Leetcode 29 Divide Two Integers 位操作的巧妙运用

Divide two integers without using multiplication, division and mod operator. I...

1816
来自专栏Java面试笔试题

GC是什么?为什么要有GC?

GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象...

595
来自专栏difcareer的技术笔记

android6.0系统Healthd深入分析[转载]

概述 Healthd是android4.4之后提出来的一种中介模型,该模型向下监听来自底层的电池事件,向上传递电池数据信息给Framework层的Batter...

481
来自专栏草根专栏

依赖反转原则DIP 与使用了Repository模式的asp.net core项目结构

DIP 依赖反转原则 Dependency Inversion Principle 的定义如下:

3478
来自专栏用户2442861的专栏

近一个月的面试总结 分类:JAVA

本文转载自:http://blog.csdn.net/pistolove/article/details/46753275

432
来自专栏大数据钻研

一个基于Java的开源URL嗅探器

这是一个可以检测并规范化文本中的URL地址的Java库。 ? 今天,我们很高兴做一个分享,因为我所在的 Linkedin 公司 开源了我们做的一个ULR探测工具...

34411
来自专栏Python小屋

在Python程序中设置函数最大递归深度

在函数调用时,为了保证能够正确返回,必须进行保存现场和恢复现场,也就是被调函数结束后能够回到主调函数中离开时的位置然后继续执行主调函数中的代码。这些现场或上下文...

772

扫描关注云+社区