设计模式七大原则之接口隔离原则

比眉伴天荒 2023-01-23 13:51 167阅读 0赞

设计模式七大原则之接口隔离原则

什么是接口隔离原则

一个类对另一个类的依赖应该建立在最小的接口上。

举个栗子

在这里插入图片描述

  1. interface Animal {
  2. void run();
  3. void fly();
  4. void swim();
  5. void eat();
  6. void sleep();
  7. }
  8. class Bird implements Animal {
  9. @Override
  10. public void run() {
  11. }
  12. @Override
  13. public void fly() {
  14. System.out.println("Bird fly..."); }
  15. @Override
  16. public void swim() {
  17. }
  18. @Override
  19. public void eat() {
  20. System.out.println("Bird eat..."); }
  21. @Override
  22. public void sleep() {
  23. System.out.println("Bird sleep..."); }
  24. }
  25. class Fish implements Animal {
  26. @Override
  27. public void run() {
  28. }
  29. @Override
  30. public void fly() {
  31. }
  32. @Override
  33. public void swim() {
  34. System.out.println("Fish swim..."); }
  35. @Override
  36. public void eat() {
  37. System.out.println("Fish eat..."); }
  38. @Override
  39. public void sleep() {
  40. System.out.println("Fish sleep..."); }
  41. }
  42. class Human implements Animal {
  43. @Override
  44. public void run() {
  45. System.out.println("Human run..."); }
  46. @Override
  47. public void fly() {
  48. System.out.println("Human fly airplanes..."); }
  49. @Override
  50. public void swim() {
  51. System.out.println("Human swim..."); }
  52. @Override
  53. public void eat() {
  54. System.out.println("Human eat..."); }
  55. @Override
  56. public void sleep() {
  57. System.out.println("Human sleep..."); }
  58. }

Bird类除了基础的eat和sleep方法外,仅需要一个fly方法,但Animal接口中却规定了两个Bird所不需要的方法,Fish类同理(一般的鸟不会跑和游泳,一般的鱼也不会飞和跑),不遵循接口隔离原则。

此时需要对Animal接口进行拆分:
在这里插入图片描述

  1. interface BaseAnimal {
  2. void eat();
  3. void sleep();
  4. }
  5. interface Flyable {
  6. void fly();
  7. }
  8. interface Swimable {
  9. void swim();
  10. }
  11. interface Runable {
  12. void run();
  13. }
  14. class Bird implements BaseAnimal, Flyable {
  15. @Override
  16. public void fly() {
  17. System.out.println("Bird fly..."); }
  18. @Override
  19. public void eat() {
  20. System.out.println("Bird eat..."); }
  21. @Override
  22. public void sleep() {
  23. System.out.println("Bird sleep..."); }
  24. }
  25. class Fish implements BaseAnimal, Swimable {
  26. @Override
  27. public void swim() {
  28. System.out.println("Fish swim..."); }
  29. @Override
  30. public void eat() {
  31. System.out.println("Fish eat..."); }
  32. @Override
  33. public void sleep() {
  34. System.out.println("Fish sleep..."); }
  35. }
  36. class Human implements BaseAnimal, Flyable, Swimable, Runable {
  37. @Override
  38. public void run() {
  39. System.out.println("Human run..."); }
  40. @Override
  41. public void fly() {
  42. System.out.println("Human fly airplanes..."); }
  43. @Override
  44. public void swim() {
  45. System.out.println("Human swim..."); }
  46. @Override
  47. public void eat() {
  48. System.out.println("Human eat..."); }
  49. @Override
  50. public void sleep() {
  51. System.out.println("Human sleep..."); }
  52. }

现在来看,Bird类仅需要实现Flyable接口和BaseAnimal接口中的方法而无需实现游泳和跑的方法,Fish类仅需要实现Swimable接口和BaseAnimal接口中的方法而无需实现飞和跑的方法,Human由于可以使用工具上天入地,因此需要实现Flyable、Swimable、Runable和BaseAnimal四个接口。

既保证了功能,又去除了不需要的方法实现。

发表评论

表情:
评论列表 (有 0 条评论,167人围观)

还没有评论,来说两句吧...

相关阅读

    相关 设计原则接口隔离原则

    tip: 需要《设计模式之禅》的书籍,可以联系我 作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。