设计模式系列(二)七大设计原则-----接口隔离原则

    科技2022-07-12  140

    七大设计原则之单一接口隔离原则

    接口隔离原则案例应用实例改进

    上一篇:设计模式系列(一)七大设计原则-----单一职责原则 下一篇:设计模式系列(三)七大设计原则-----依赖倒转原则

    接口隔离原则

    介绍:客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上

    案例

    案例uml图 如上的uml图, 类 A 通过接口 Interface1 依赖类 B,类 C 通过接口 Interface1 依赖类 D,如果接口 Interface1 对于类 A 和类 C 来说不是最小接口,那么类 B 和类 D 必须去实现他们不需要的方法按照接口隔离原则应该这样处理:将接口 Interface1 拆分成 独立的接口,类A与类C分别与它们需要的接口建立依赖关系。也就是采用接口隔离原则

    应用实例

    按照上面的UML类图实现此代码 package com.atguigu.principle.segregation; public class Segregation1{ 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 voido peration3(){ System.out.println("D 实现了 operation3"); } public void operation4(){ System.out.println("D 实现了 operation4"); } public void operation5(){ System.out.println("D 实现了 operation5"); } } //A 类通过接口 Interface1 依赖(使用)B 类,但是只会用到 1,2,3 方法 classA{ public void depend1(Interface1 i){ i.operation1(); } public void depend2(Interface1 i){ i.operation2(); } public void depend3(Interface1 i){ i.operation3(); } } //C 类通过接口 Interface1 依赖(使用)D 类,但是只会用到 1,4,5 方法 classC{ public void depend1(Interface1 i){ i.operation1(); } public void depend4(Interface1 i){ i.operation4(); } public void depend5(Interface1 i){ i.operation5(); } } 情况描述: A类通过接口 Interface1 依赖(使用)B类,但是实际上只是用到1,2,3方法B类通过接口 Interface2 依赖(使用)D 类,但是只会用到 1,4,5 方法 注:综上,两个实现类实现同一个接口,但是却并不会用到接口里面的所有方法,违法接口隔离原则

    改进

    类 A 通过接口 Interface1 依赖类 B,类 C 通过接口 Interface1 依赖类 D,如果接口 Interface1 对于类 A 和类 C 来说不是最小接口,那么类 B 和类 D 必须去实现他们不需要的方法将接口 Interface1 拆分为独立的几个接口,类 A 和类 C 分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则接口 Interface1 中出现的方法,根据实际情况拆分为三个接口,如下新UML所示 代码实现 package com.atguigu.principle.segregation.improve; 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()); } } // 接口 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"); } } //A 类通过接口 Interface1 依赖(使用)B 类,但是只会用到 1,2,3 方法 classA{ public void depend1(Interface1 i){ i.operation1(); } public void depend2(Interface2 i){ i.operation2(); } public void depend3(Interface2 i){ i.operation3(); } } //C 类通过接口 Interface1 依赖(使用)D 类,但是只会用到 1,4,5 方法 classC{ public void depend1(Interface1 i){ i.operation1(); } public void depend4(Interface3 i){ i.operation4(); } public void depend5(Interface3 i){ i.operation5(); } }
    Processed: 0.016, SQL: 8