经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
设计模式的七大原则(2) --接口隔离原则
来源:cnblogs  作者:正号先生  时间:2019/7/26 8:59:41  对本文有异议

前言

上一节我们学习了单一职责原则,简单来说就是各司其职,厨师就专注做好菜,不要跑到前堂做起小二。

但是呢,万事无一绝对。如果只是小饭店有时候也不是特别严格。还是那句话,原则是死的,人是活的

接下来我们来学习接口隔离原则。

基本介绍

客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。

怎么理解呢?

就是说,一个接口拥有的行为应该尽可能的小。

如果说这个接口定义了很多方法,但是呢,我们实现这个接口的时候并不需要这么多的方法。那么你就会发现,除了个别几个你需要的方法实现了,很多不需要的方法也必须得实现了,造成很多空方法的出现。

这是一种很糟糕的设计,这样做不仅会强制实现本来不该实现的方法,最严重的是会给使用者造成假象,即这个实现类拥有接口中所有的行为,结果调用方法时却没收获到想要的结果。

案例

案例如下:

  1. public interface Car {
  2. void run();
  3. void fly();
  4. void appearance();
  5. }
  1. public class Audi implements Car {
  2. public static void main(String args[]){
  3. Audi audi = new Audi();
  4. audi.run();
  5. audi.appearance();
  6. audi.fly();
  7. }
  8. @Override
  9. public void appearance() {
  10. System.out.println("我奥迪有炫酷的车灯");
  11. }
  12. @Override
  13. public void run() {
  14. System.out.println("我不光能跑,我还跑的很快");
  15. }
  16. @Override
  17. public void fly() {
  18. }
  19. }

上诉代码输出结果

  1. 我不光能跑,我还跑的很快
  2. 我奥迪有炫酷的车灯

上诉代码中的接口Car就没有遵循最小接口原则。因为这个接口定义了一个并不属于Car的方法fly()。你在实现这个接口的时候你也必须重写fly()方法。

但是呢,车并没有这个功能,所以大部分情况下你会将这个方法重写了但是里面是空方法。

首先代码不简洁。其次当某个人调用该类方法的时候,就会给使用者造成车会飞的假象。

default关键字

上述代码在JDK1.8版本以后还能能写成这种形式

  1. public interface Car {
  2. default void run(){
  3. System.out.println("我能跑");
  4. }
  5. default void fly(){
  6. System.out.println(("我不能飞"));
  7. }
  8. void appearance();
  9. }
  1. public class Audi implements Car {
  2. public static void main(String args[]){
  3. Audi audi = new Audi();
  4. audi.run(); //我不光能跑,我还跑的很快
  5. audi.appearance(); //我有炫酷的车灯
  6. audi.fly(); //我不能飞
  7. }
  8. @Override
  9. public void appearance() {
  10. System.out.println("我有炫酷的车灯");
  11. }
  12. @Override
  13. public void run() {
  14. System.out.println("我不光能跑,我还跑的很快");
  15. }
  16. }

在jdk1.8以后提供了default关键字,这个关键字的出现让接口能够有默认的实现方式。

比如Car接口的的run()方法和fly()方法实现了default关键字,那么就能直接在接口当中把这个方法给实现了。

当某个类实现了这个接口的时候,就不需要强制重写该方法。

有人就会问了,是不是在1.8版本以后就可以不需要遵循最小接口原则了?答案是否定了。

即便你不需要实现这个方法,但是在使用者眼中,就会给使用者造成车会飞的假象。

当然,还是那句话,人是活的,规则是死的。很多时候我们并不是说必须百分百按照这种要求来实现我们的代码。

当你的代码严格实现该原则的时候发现,导致代码的可阅读性,可扩展性降低。甚至逻辑也复杂了很多。那么就可以按照具体的情况违背这种原则。

总结

接口隔离原则和职责单一原则有共同性。大家可以多思考一下。

还是那句话慢慢的学,一个一个掌握,才更深刻,贪多嚼不烂。

下一篇我们来学习依赖倒转原则。

原文链接:http://www.cnblogs.com/zhxiansheng/p/11244991.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号