| 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上 |
| 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要的方法。 |

| package com.atguigu.principle.segregation.improve; |
| |
| public class Segregation1 { |
| public static void main(String[] args) { |
| |
| |
| A a = new A(); |
| a.depend1(new B()); |
| a.depend2(new B()); |
| a.depend3(new B()); |
| |
| C c = new C(); |
| c.depend1(new D()); |
| c.depend4(new D()); |
| c.depend5(new D()); |
| } |
| } |
| |
| |
| interface Interface1 { |
| void operation1(); |
| } |
| |
| |
| interface Interface2 { |
| void operation2(); |
| void operation3(); |
| } |
| |
| |
| 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 { |
| public void depend1(Interface1 i) { |
| i.operation1(); |
| } |
| public void depend2(Interface2 i) { |
| i.operation2(); |
| } |
| public void depend3(Interface2 i) { |
| i.operation3(); |
| } |
| } |
| |
| class C { |
| public void depend1(Interface1 i) { |
| i.operation1(); |
| } |
| public void depend4(Interface3 i) { |
| i.operation4(); |
| } |
| public void depend5(Interface3 i) { |
| i.operation5(); |
| } |
| } |
| 将接口Interface1拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则 |

| 1) 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要的方法 |
| 2) 将接口Interface1拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则 |
| 3) 接口Interface1中出现的方法,根据实际情况拆分为三个接口 |
| package com.atguigu.principle.segregation.improve; |
| |
| public class Segregation1 { |
| public static void main(String[] args) { |
| |
| |
| A a = new A(); |
| a.depend1(new B()); |
| a.depend2(new B()); |
| a.depend3(new B()); |
| |
| C c = new C(); |
| c.depend1(new D()); |
| c.depend4(new D()); |
| c.depend5(new D()); |
| } |
| } |
| |
| |
| interface Interface1 { |
| void operation1(); |
| } |
| |
| |
| interface Interface2 { |
| void operation2(); |
| void operation3(); |
| } |
| |
| |
| 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 { |
| public void depend1(Interface1 i) { |
| i.operation1(); |
| } |
| public void depend2(Interface2 i) { |
| i.operation2(); |
| } |
| public void depend3(Interface2 i) { |
| i.operation3(); |
| } |
| } |
| |
| class C { |
| public void depend1(Interface1 i) { |
| i.operation1(); |
| } |
| public void depend4(Interface3 i) { |
| i.operation4(); |
| } |
| public void depend5(Interface3 i) { |
| i.operation5(); |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?