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

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

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

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

二、举例说明:

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

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏HTML5学堂

一步步教你弹性框架-上篇

HTML5学堂:本系列主要在于跟大家分享弹性运动框架的制作方式。弹性运动框架的运动方式类似于弹簧,有一种回弹的效果,在网站中的一些特效当中还是有一些应用的。实现...

3428
来自专栏数据小魔方

Xcelsius(水晶易表)系列9——动态选择器应用(过滤器)

今天继续跟大家分享关于水晶易表的动态选择器高级用法——过滤器。 这个部件可以将多层帅选筛选自动化,比如我们前两篇所讲解的多重筛选案例中, 需要为每一个筛选字段单...

2966
来自专栏张善友的专栏

MVC结构简介

本文编译自J2EE的相关文档。 MVC(Model-View-Controller)应用程序结构被用来分析分布式应用程序的特征。这种抽象结构能有助于将应用程序分...

1655
来自专栏前端小作坊

中文排版二三事

前段时间一直在折腾中文排版相关的事情,自认为结果还算不错。故开源之,即是Entry.css。这是一个可配置的、更适合阅读的中文文章样式库,可以用来快速搭建中文博...

721
来自专栏听雨堂

真正将标注文字遮盖的方法

    很多时候,需要将地图的一些部分遮盖,一般的做法是在一个图层上绘制一些遮盖面,把图层放到上层。但这种方法有个问题,无法将下面图层的自动标注遮盖。     ...

1895
来自专栏PPV课数据科学社区

【学习】网站数据分析:网站分析的基本度量

? 我们在使用各种网站分析工具的时候,会看到很多不同的度量指标,可能不同的工具会有不同的命名和定义,这里列举一些常见的度量,简单说明一下它们是如何计算得到的。...

3054
来自专栏小樱的经验随笔

CTF---密码学入门第三题 奇怪的短信

奇怪的短信分值:10 来源: Ayn 难度:易 参与人数:5117人 Get Flag:2623人 答题人数:2858人 解题通过率:92% 收到一条奇怪的...

3566
来自专栏理论坞

“模糊”我见多了,从来没见过你这样的- -#(

衔接呢,我认为还是模糊比较好用,比如这头驴的舌头、牙齿、毛发…人家是馬(#‵′)凸

795
来自专栏ACM小冰成长之路

51Nod-1615-跳跃的杰克

ACM模版 描述 ? 题解 这个题代码炒鸡简单,只要想通了就好了。 这里我们贪心的想,尽量向靠近的方向跳,如果跳过了,我们考虑超过的距离是奇数还是偶数,如果是偶...

1886
来自专栏GreenLeaves

Javascript之Dom学习

1.简介:DOM是一套对文档的内容进行抽象和概念化的方法。在现实世界里,人们对"世界对象模型"一定不会陌生,当人们用"房子","汽车"等这一类专用名字来描述生活...

1869

扫码关注云+社区