java设计模式七大原则---2、接口隔离原则

接口隔离原则

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

什么意思呢?

就比如一个类我继承A接口,那么我就要实现你的所有接口,然而现在我只想要你其中的一到两个方法,那么这就不是最小的接口

上代码:

//这种方案A类只使用了接口中的010203方法,0405方法没有使用,不符合接口依赖中最小接口原则
interface TestInterface{
    void function01();
    void function02();
    void function03();
    void function04();
    void function05();
}
class One implements TestInterface{

    @Override
    public void function01() {
        System.out.println("One实现方法一");
    }

    @Override
    public void function02() {
        System.out.println("One实现方法二");
    }

    @Override
    public void function03() {
        System.out.println("One实现方法三");
    }

    @Override
    public void function04() {
        System.out.println("One实现方法四");
    }

    @Override
    public void function05() {
        System.out.println("One实现方法五");
    }
}
class Two implements  TestInterface{

    @Override
    public void function01() {
        System.out.println("Two实现了方法一");
    }

    @Override
    public void function02() {
        System.out.println("Two实现了方法二");
    }

    @Override
    public void function03() {
        System.out.println("Two实现了方法三");
    }

    @Override
    public void function04() {
        System.out.println("Two实现了方法四");
    }

    @Override
    public void function05() {
        System.out.println("Two实现了方法五");
    }
}

那么要如何改进,让其符合接口隔离原则呢?

首先,我们判断该接口哪些是A接口要用的方法,哪些是B接口需要的方法,哪些是他们都需要的方法。

将其拆分为三个不同的接口,让A,B分别继承公共和其所需要方法的接口

上代码:

//改进方案
//将接口拆分为三个接口
//公共方法接口
interface Common{
    void function01();
}
//A所需的独立的方法
interface InterfaceA{
    void function02();
    void function03();
}
//B所需的独立的方法
interface InterfaceB{
    void function04();
    void function05();
}
//One2实现common和interfaceA接口
class One2 implements InterfaceA,Common{

    @Override
    public void function01() {
        System.out.println("One2方法1");
    }

    @Override
    public void function02() {
        System.out.println("One2方法2");
    }

    @Override
    public void function03() {
        System.out.println("One2方法3");
    }
}
//Two2实现Common和InterfaceB接口
class Two2 implements Common,InterfaceB{

    @Override
    public void function01() {
        System.out.println("Two2方法1");
    }

    @Override
    public void function04() {
        System.out.println("Two2方法4");
    }

    @Override
    public void function05() {
        System.out.println("Two2方法5");
    }
}
//A类通过接口test使用one类的方法
class A2{
    public void depend01(Common test){
        test.function01();
    }
    public void depend02(InterfaceA test){
        test.function02();
    }
    public void depend03(InterfaceA test){
        test.function03();
    }
}
//A类通过接口test使用one类的方法
class B2{
    public void depend01(Common test){
        test.function01();
    }
    public void depend04(InterfaceB test){
        test.function04();
    }
    public void depend05(InterfaceB test){
        test.function05();
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值