博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
接口隔离原则
阅读量:4093 次
发布时间:2019-05-25

本文共 3498 字,大约阅读时间需要 11 分钟。

二、接口隔离原则

基本介绍

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

应用实例

类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D。如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D也会实现不需要的方法。关系图如下:

在这里插入图片描述
解决办法:
将接口Interface1拆分为独立的几个接口,类A和类C分别与它们需要的接口建立依赖关系

  1. 不符合接口隔离原则的写法
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 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();    }}
  1. 符合接口隔离原则的写法
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());    }}//接口1interface Interface1{    void operation1();}//接口2interface Interface2{    void operation2();    void operation3();}//接口3interface 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中 实现了operation1B中 实现了operation2B中 实现了operation3D中 实现了operation1D中 实现了operation4D中 实现了operation5

转载地址:http://irtii.baihongyu.com/

你可能感兴趣的文章
shell 快捷键
查看>>
MODULE_DEVICE_TABLE的理解
查看>>
No devices detected. Fatal server error: no screens found
查看>>
db db2_monitorTool IBM Rational Performace Tester
查看>>
postgresql监控工具pgstatspack的安装及使用
查看>>
swift中单例的创建及销毁
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
谈谈加密和混淆吧[转]
查看>>
乘法逆元
查看>>
Objective-C 基础入门(一)
查看>>
找工作准备的方向(4月22日写的)
查看>>
关于fwrite写入文件后打开查看是乱码的问题
查看>>
用结构体指针前必须要用malloc,不然会出现段错误
查看>>
Linux系统中的美
查看>>
一些实战项目(linux应用层编程,多线程编程,网络编程)
查看>>
STM32CubeMX 真的不要太好用
查看>>
不要买铝合金机架的无人机,不耐摔,易变形弯曲。
查看>>
ACfly也是基于FreeRTOS的
查看>>
电机堵转
查看>>