设计原则之接口隔离原则

男娘i 2024-03-16 07:31 232阅读 0赞

tip: 需要《设计模式之禅》的书籍,可以联系我

作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。

相关规则:

推荐:体系化学习Java(Java面试专题)

1.6大设计规则-迪米特法则
2.6大设计原则-里氏替换原则
3.6大设计规则-开闭原则
4.6大设计规则-单一职责原则
5.6大设计规则-依赖倒置原则

文章目录

  • 接口隔离原则

接口隔离原则

接口隔离原则,在《设计模式之禅》的第四章中介绍,但是文章开头并没有直接介绍这个原则的定义,可能因为不好描述吧。而是总结了这个原则的一些特性:

1、保证接口的纯洁性,接口要尽量小
2、接口的设计要高内聚,但是功能职责要单一

这两点怎么理解呢,我们举个例子:

我早上起床,第一件事是先运动,第二件事是洗漱,第三件是吃饭,第四件事是开车上班。那么这个四件事如果放在一个类里面呢,那么就不满于单一职责的原则了,而且接口力度不够细。
那么怎么利用接口隔离原则优化呢?如下例子。

我们通过行程类 Schedule 将事件全部串起来,每个事件都是从特定的接口实现来的,每件事他都发生在它应该发生的地方,这样写才符合接口隔离且单一职责的原则。
Schedule schedule = new Schedule();
schedule.sport();
schedule.wash();
schedule.eat();
schedule.drive();

  1. package com.pany.camp.design.principle.quarantine;
  2. /**
  3. *
  4. * @description: 客厅
  5. * @copyright: @Copyright (c) 2022
  6. * @company: Aiocloud
  7. * @author: pany
  8. * @version: 1.0.0
  9. * @createTime: 2023-05-31 21:33
  10. */
  11. public interface LivingRoom {
  12. /**
  13. * 在客厅运动
  14. *
  15. * @since 1.0.0
  16. * @param
  17. * @return: void
  18. * @author: pany
  19. * @version: 1.0.0
  20. * @createTime: 2023-05-31 21:33
  21. */
  22. void sport();
  23. }
  24. package com.pany.camp.design.principle.quarantine;
  25. /**
  26. *
  27. * @description: 厕所
  28. * @copyright: @Copyright (c) 2022
  29. * @company: Aiocloud
  30. * @author: pany
  31. * @version: 1.0.0
  32. * @createTime: 2023-05-31 21:34
  33. */
  34. public interface Toilet {
  35. /**
  36. * 在厕所洗漱
  37. *
  38. * @since 1.0.0
  39. * @param
  40. * @return: void
  41. * @author: pany
  42. * @version: 1.0.0
  43. * @createTime: 2023-05-31 21:34
  44. */
  45. void wash();
  46. }
  47. package com.pany.camp.design.principle.quarantine;
  48. /**
  49. *
  50. * @description: 餐桌
  51. * @copyright: @Copyright (c) 2022
  52. * @company: Aiocloud
  53. * @author: pany
  54. * @version: 1.0.0
  55. * @createTime: 2023-05-31 21:35
  56. */
  57. public interface DiningTable {
  58. /**
  59. * 餐桌上吃饭
  60. *
  61. * @since 1.0.0
  62. * @param
  63. * @return: void
  64. * @author: pany
  65. * @version: 1.0.0
  66. * @createTime: 2023-05-31 21:35
  67. */
  68. void eat();
  69. }
  70. package com.pany.camp.design.principle.quarantine;
  71. /**
  72. *
  73. * @description: 车
  74. * @copyright: @Copyright (c) 2022
  75. * @company: Aiocloud
  76. * @author: pany
  77. * @version: 1.0.0
  78. * @createTime: 2023-05-31 21:35
  79. */
  80. public interface Car {
  81. /**
  82. * 开车上班
  83. *
  84. * @since 1.0.0
  85. * @param
  86. * @return: void
  87. * @author: pany
  88. * @version: 1.0.0
  89. * @createTime: 2023-05-31 21:36
  90. */
  91. void drive();
  92. }
  93. package com.pany.camp.design.principle.quarantine;
  94. /**
  95. *
  96. * @description: 行程安排
  97. * @copyright: @Copyright (c) 2022
  98. * @company: Aiocloud
  99. * @author: pany
  100. * @version: 1.0.0
  101. * @createTime: 2023-05-31 21:37
  102. */
  103. public class Schedule implements LivingRoom, Toilet, DiningTable, Car {
  104. @Override
  105. public void sport() {
  106. System.out.printf("sport");
  107. }
  108. @Override
  109. public void wash() {
  110. System.out.printf("wash");
  111. }
  112. @Override
  113. public void eat() {
  114. System.out.printf("eat");
  115. }
  116. @Override
  117. public void drive() {
  118. System.out.println("drive");
  119. }
  120. }
  121. package com.pany.camp.design.principle.quarantine;
  122. public class User {
  123. public static void main(String[] args) {
  124. Schedule schedule = new Schedule();
  125. schedule.sport();
  126. schedule.wash();
  127. schedule.eat();
  128. schedule.drive();
  129. }
  130. }

发表评论

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

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

相关阅读

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

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