接口隔离原则 Interface Segregation Principle
Posted thinkaboutmore
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口隔离原则 Interface Segregation Principle相关的知识,希望对你有一定的参考价值。
接口隔离原则介绍:
客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上
示例:
错误示例:
package com.kittenplus.principle.segregation; public class seregation2 { public static void main(String[] args) { } 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(); } } } }
正确方法:
package com.kittenplus.principle.segregation; public class seregation2 { public static void main(String[] args) { 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()); } } 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 { //A 类通过 Interface1 依赖(使用)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 依赖(使用)D类,但是只会用到1 2 3 方法 public void depend1(Interface1 i) { i.operation1(); } public void depend4(Interface3 i) { i.operation4(); } public void depend5(Interface3 i) { i.operation5(); } }
以上是关于接口隔离原则 Interface Segregation Principle的主要内容,如果未能解决你的问题,请参考以下文章
设计原则之-接口隔离原则(Interface Segregation Principle, ISP)
接口隔离原则(Interface Segregation Principle,ISP)