设为首页 加入收藏

TOP

接口隔离原则(一)
2023-08-26 21:10:25 】 浏览:40
Tags:

接口隔离原则

介绍

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

案例引入

A类,通过接口1依赖B类,C类通过依赖接口1依赖D类,A类只会用到1-3方法,C类只会使用到1,4,5方法。

uml类图

代码实现
public class Segregation1 {
    public static void main(String[] args) {
        A a = new A();
        a.dependency1(new B());
        a.dependency2(new B());
        a.dependency3(new B());

        C c = new C();
        c.dependency1(new D());
        c.dependency4(new D());
        c.dependency5(new D());
    }
}

interface Interface1{
    public void operation1();
    public void operation2();
    public void operation3();
    public void operation4();
    public void operation5();
}

class B implements Interface1{
    @Override
    public void operation1() {
        System.out.println("B 类 operation1");
    }

    @Override
    public void operation2() {
        System.out.println("B 类 operation2");
    }

    @Override
    public void operation3() {
        System.out.println("B 类 operation3");
    }

    @Override
    public void operation4() {
        System.out.println("B 类 operation4");
    }

    @Override
    public void operation5() {
        System.out.println("B 类 operation5");
    }
}

class D implements Interface1{
    @Override
    public void operation1() {
        System.out.println("D 类 operation1");
    }

    @Override
    public void operation2() {
        System.out.println("D 类 operation2");
    }

    @Override
    public void operation3() {
        System.out.println("D 类 operation3");
    }

    @Override
    public void operation4() {
        System.out.println("D 类 operation4");
    }

    @Override
    public void operation5() {
        System.out.println("D 类 operation5");
    }
}

class A{

    public void dependency1(Interface1 i){
        i.operation1();
    }
    public void dependency2(Interface1 i){
        i.operation2();
    }
    public void dependency3(Interface1 i){
        i.operation3();
    }

}

class C{
    public void dependency1(Interface1 i){
        i.operation1();
    }
    public void dependency4(Interface1 i){
        i.operation4();
    }
    public void dependency5(Interface1 i){
        i.operation5();
    }
}
案例分析
  • 类A通过接口interface1依赖B,类C通过接口依赖D,因为接口interface1对于A类和C类来说,不是最小的接口,就会导致类B,类D去重写使用不到的方法
  • 将接口interface1拆分成独立的接口,类A和C分别和其依赖的接口建立依赖关系。也就是采用接口隔离原则。
  • 接口interface1出现的方法,也拆分成三个接口 如下图所示

案例改进

uml类图

public class Segregation2 {
    public static void main(String[] args) {
        A a = new A();
        a.dependency1(new B());
        a.dependency2(new B());
        a.dependency3(new B());

        C c = new C();
        c.dependency1(new D());
        c.dependency4(new D());
        c.dependency5(new D());
    }
}

interface Interface1 {
    public void operation1();
}

interface Interface2{
    public void operation2();
    public void operation3();
}

interface Interface3{
    public void operation4();
    public void operation5();
}


class B implements Interface1,Interface2{
    @Override
    public void operation1() {
        System.out.println("B 类 operation1");
    }

    @Override
    public void operation2() {
        System.out.println("B 类 operation2");
    }

    @Override
    public void operation3() {
        System.out.println("B 类 operation3");
    }
}

class D implements Interface1,Interface3 {
    @Override
    public void operation1() {
        System.out.println("D 类 operation1");
    }

    @Override
    public void operation4() {
        System.out.println("D 类 operation4");
    }

    @Override
    public void operation5() {
        System.out.println("D 类 operation5");
    }
}

class A{

    public void dependency1(Interface1 i){
        i.operation1();
    }
    public void dependen
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于SpringBoot中出现的循环依赖.. 下一篇谷歌captcha图形验证码开发

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目