【设计模式】七大设计原则(四)—— 接口隔离原则(Interface Segregation Principle)
作者:互联网
接口隔离原则介绍
1.客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立再最小的接口上
2.使用多个隔离的接口,比使用单个接口要好。
3.他还有另一个意思:降低类之间的耦合度。
示例
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();
}
}
可以看到其实A类依赖B类,C类依赖D类都只使用了部分的方法,但是B类和D类都实现了接口Interface1的五个方法,有部分方法是没用到的。按照接口隔离原则应当将接口Interface1拆成几个接口,类A和类C分别与他们需要的接口建立依赖关系。
//接口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 实现了 operation4");
}
public void operation3(){
System.out.println("B 实现了 operation5");
}
}
class D implements Interface1,Interface3{
public void operation1(){
System.out.println("D 实现了 operation1");
}
public void operation4(){
System.out.println("D 实现了 operation2");
}
public void operation5(){
System.out.println("D 实现了 operation3");
}
}
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();
}
}
使用一下
public class Segregation1 {
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());
}
}
标签:Interface1,void,System,接口隔离,Segregation,println,设计模式,public,out 来源: https://www.cnblogs.com/kakaji/p/16171584.html