设计模式(2)--接口隔离原则

简介: 设计模式(2)--接口隔离原则

不遵守接口隔离的案例


1dc618a0ed9580ce8bfa6facb208c08f.png

代码:

public class Segregation1 {
  public static void main(String[] args) {
  // TODO Auto-generated method stub
  }
}
//接口
interface Interface1 {
  void operation1();
  void operation2();
  void operation3();
  void operation4();
  void operation5();
}
class B implements Interface1 {
  public void operation1() {
  System.out.println("B 实现了 operation1");
  }
  public void operation2() {
  System.out.println("B 实现了 operation2");
  }
  public void operation3() {
  System.out.println("B 实现了 operation3");
  }
  public void operation4() {
  System.out.println("B 实现了 operation4");
  }
  public void operation5() {
  System.out.println("B 实现了 operation5");
  }
}
class D implements Interface1 {
  public void operation1() {
  System.out.println("D 实现了 operation1");
  }
  public void operation2() {
  System.out.println("D 实现了 operation2");
  }
  public void operation3() {
  System.out.println("D 实现了 operation3");
  }
  public void operation4() {
  System.out.println("D 实现了 operation4");
  }
  public void operation5() {
  System.out.println("D 实现了 operation5");
  }
}
class A { //A 类通过接口Interface1 依赖(使用) B类,但是只会用到1,2,3方法
  public void depend1(Interface1 i) {
  i.operation1();
  }
  public void depend2(Interface1 i) {
  i.operation2();
  }
  public void depend3(Interface1 i) {
  i.operation3();
  }
}
class C { //C 类通过接口Interface1 依赖(使用) D类,但是只会用到1,4,5方法
  public void depend1(Interface1 i) {
  i.operation1();
  }
  public void depend4(Interface1 i) {
  i.operation4();
  }
  public void depend5(Interface1 i) {
  i.operation5();
  }
}


问题


如果没有隔离接口,所有的接口在一个类中,可以看到B和D必须实现所有的接口


整改


优化思路


5d4c6812c8535adbb050f4ddf2e1bce8.png


优化类图


46a9d80a6e05e4e3b19d57a0ee70bcdf.png


代码


package com.atguigu.principle.segregation.improve;
public class Segregation1 {
  public static void main(String[] args) {
  // TODO Auto-generated method stub
  // 使用一把
  A a = new A();
  a.depend1(new B()); // A类通过接口去依赖B类
  a.depend2(new B());
  a.depend3(new B());
  C c = new C();
  c.depend1(new D()); // C类通过接口去依赖(使用)D类
  c.depend4(new D());
  c.depend5(new D());
  }
}
// 接口1
interface Interface1 {
  void operation1();
}
// 接口2
interface Interface2 {
  void operation2();
  void operation3();
}
// 接口3
interface Interface3 {
  void operation4();
  void operation5();
}
class B implements Interface1, Interface2 {
  public void operation1() {
  System.out.println("B 实现了 operation1");
  }
  public void operation2() {
  System.out.println("B 实现了 operation2");
  }
  public void operation3() {
  System.out.println("B 实现了 operation3");
  }
}
class D implements Interface1, Interface3 {
  public void operation1() {
  System.out.println("D 实现了 operation1");
  }
  public void operation4() {
  System.out.println("D 实现了 operation4");
  }
  public void operation5() {
  System.out.println("D 实现了 operation5");
  }
}
class A { // A 类通过接口Interface1,Interface2 依赖(使用) B类,但是只会用到1,2,3方法
  public void depend1(Interface1 i) {
  i.operation1();
  }
  public void depend2(Interface2 i) {
  i.operation2();
  }
  public void depend3(Interface2 i) {
  i.operation3();
  }
}
class C { // C 类通过接口Interface1,Interface3 依赖(使用) D类,但是只会用到1,4,5方法
  public void depend1(Interface1 i) {
  i.operation1();
  }
  public void depend4(Interface3 i) {
  i.operation4();
  }
  public void depend5(Interface3 i) {
  i.operation5();
  }
}


可以看到B和D不必实现所有的接口了,A和D也只获得了自己想要的接口而已.



相关文章
|
设计模式 Java 测试技术
Java设计模式七大原则-接口隔离原则
Java设计模式七大原则-接口隔离原则
95 0
|
设计模式 消息中间件 存储
【Java设计模式 经典设计原则】四 SOLID-ISP接口隔离原则
【Java设计模式 经典设计原则】四 SOLID-ISP接口隔离原则
176 0
|
设计模式 测试技术
设计模式 - 六大设计原则之ISP(接口隔离原则)
接口隔离原则(Interface Segregation Principle, ISP),要求尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含相关的方法。 接口隔离是为了高内聚、低耦合。 在实际的开发中,通常都是先定义好需要开发的接口,并由各个服务去实现。 但是如果没有经过考虑和设计,很可能造成一个接口中包含了众多的接口方法,而这些接口并不一定在每一个类中都需要实现, 这样的接口很难维护, 也不易于扩展,每一次修改验证都有潜在的风险。
215 0
设计模式 - 六大设计原则之ISP(接口隔离原则)
|
设计模式
设计模式七大原则——接口隔离原则
设计模式七大原则——接口隔离原则
设计模式七大原则——接口隔离原则
|
设计模式 Java
设计模式—— 四:接口隔离原则
设计模式—— 四:接口隔离原则
166 0
设计模式—— 四:接口隔离原则
|
设计模式 uml
设计模式六大原则(四)----接口隔离原则
设计模式六大原则(四)----接口隔离原则
200 0
|
设计模式
【设计模式】软件设计七大原则 ( 接口隔离原则 | 代码示例 )
【设计模式】软件设计七大原则 ( 接口隔离原则 | 代码示例 )
216 0
|
设计模式 uml
寂然解读设计模式 - 接口隔离原则
接口隔离原则就是当我一个类通过接口依赖(使用)另一个类的时候,要保证依赖的该接口是最小的,接口里面有方法用不到的,就进行隔离,而隔离的做法就是,就对原来接口进行拆分,拆分为最小粒度,来避免耦合
154 0
寂然解读设计模式 - 接口隔离原则
设计模式六大原则(4):接口隔离原则
定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。
1110 1