北京总部

软件开发培训:接口隔离原则丨买电视机的例子

作者: 来源: 时间: 2017-02-14 14:58:33

现在我们讲下“接口隔离原则”,看看下面这张海报

接口隔离原则海报


同学:这是什么意思?

 

小卓:它的意思是这样的:“用户不应该被迫依赖他们不使用的接口。

同学:解释一下~


小卓:好,解释如下:

假设你想去买一台电视机并且有两种类型可以选择,其中一种有很多开关和按钮,但是多数对你来说用不到,另一种只有几个开关和按钮,并且看来你很熟悉怎么用。如果这两种电视机提供同样的功能,你会选择哪一种?

同学:当然是第二种了!



小卓:嗯,但是为什么呢?

同学:对因为我不需要看起来很麻烦而且对我也不必要的开关和按钮

小卓:正确。同样的,假如你有一些类,你通过接口暴露了类的功能,这样外部就能够知道类中可用的功能,客户端也可以根据接口来设计。当然那,如果接口太大,或是暴露的方法太多,从外部看也会很混乱。接口包含的方法太多也会降低可复用性, 这种包含无用方法的“胖接口”无疑会增加类的耦合。

这还会引起其他的问题。如果一个类视图实现接口,它需要实现接口中所有的方法,哪怕一点都用不到。所以,这样会增加系统复杂度,降低系统可维护性和稳定性。

接口隔离原则确保接口实现自己的职责,且清晰明确,易于理解,具有可复用性。

同学:我明白了,你的意思是接口只应该包括必要的方法而不是所有的。


小卓:是的,让我们看一个例子。

下面的接口是一个“胖接口”,这违反接口隔离原则:


违反接口隔离原则的接口示例


注意,IBird接口定义 Fly()的行为有许多鸟类的行为。现在,如果一只鸟类(比方说,鸵鸟)实现了这个接口,它将会实现不必要的 Fly()的行为(鸵鸟不会飞)。

同学:是啊!因此,这个接口必须被分割?


小卓:是的,“胖接口”应该分隔成两个不同的接口,IBird 和IFlyingBird,而IFlyingBird继承于IBird。

接口隔离原则的例子中正确版本的接口


如果有一只不会飞的鸟(比如,驼鸟),只要用IBird接口即可,如果有一保会飞的鸟(比如,翠鸟),只要用IFlyingBird接口即可。

同学:所以,回过头来看有很多按钮开关的电视的例子,制造商应该有电视机的图纸,开关和按钮也在这个方案里。若他们想造一台新款电视机时想要复用这张图纸,他们必须添加更多的按钮和开关,否则没法复用,对么?


小卓:对。

同学:若是他们真的想要复用这个方案,他们应该将电视机的图纸分为更小的部分,才能在以后制造新款电视机的时候复用这些设计方案。

 

小卓:你理解了。



出处:开源中国

译者:K6F, 凡程子, 叫我蝴蝶吧, 王薇, 人头马没面, 铂金小龟, 风子, nikeff1108, sigai

链接:http://www.oschina.net/translate/how-i-explained-ood-to-my-wife?lang=chs&page=4#

了解更多软件开发常见问题欢迎登陆中软国际教育技术知识库


相关阅读

更多

中软卓越java培训地址:北京市海淀区科学院南路2号融科资讯中心C座北楼12层 联系电话:400-666-3775 邮箱账号:etc-marketing@chinasofti.com

©2008-2016 北京中软国际教育科技股份有限公司 京ICP备14058756号-2