接口隔离原则

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

2.看图

 

package com.xx.isolation;

public interface Interface1 {
    void function();

    void function1();

    void function2();

    void function3();
}

package com.xx.isolation;

/**
 * 1.A类想通过Interface1依赖使用B类
 * 2.但是A类只用到了function,function1,function2.
 */
public class A {
    public void relyOn(Interface1 interface1) {
        interface1.function();
    }

    public void relyOn1(Interface1 interface1) {
        interface1.function1();
    }

    public void relyOn2(Interface1 interface1) {
        interface1.function2();
    }

}

package com.xx.isolation;

public class B implements Interface1 {
    @Override
    public void function() {
        System.out.println("B类的function方法");
    }

    @Override
    public void function1() {
        System.out.println("B类的function1方法");
    }

    @Override
    public void function2() {
        System.out.println("B类的function2方法");
    }

    @Override
    public void function3() {
        System.out.println("B类的function3方法");
    }
}


package com.xx.isolation;

public class C {
    public void relyOn(Interface1 interface1) {
        interface1.function1();
    }

    public void relyOn1(Interface1 interface1) {
        interface1.function2();
    }

    public void relyOn2(Interface1 interface1) {
        interface1.function3();
    }
}


package com.xx.isolation;

public class D implements Interface1 {
    @Override
    public void function() {
        System.out.println("D类的function方法");
    }

    @Override
    public void function1() {
        System.out.println("D类的function1方法");
    }

    @Override
    public void function2() {
        System.out.println("D类的function2方法");
    }

    @Override
    public void function3() {
        System.out.println("D类的function3方法");
    }
}



3.类A通过Interface1依赖类B,类C通过Interface1依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么 类B和类D必须去实现他们不需要的方法。

4.按接口隔离原则应当这样处理:

       把Interface1分成多个接口,让类A和类C分别去与他们需要 的接口建立依赖关系。也就是采用接口隔离原则。

5.经过接口隔离分析后修改的图:

 

接口Interface出现的方法,根据实际情况拆分成三个接口。

代码实现:

public interface Interface1 {
    void method();
}


public interface Interface2 {
    public void method1() ;

    public void method2();
}


public interface Interface3 {
    void method3();
}


public  class A {
    public void function(Interface1 interface1) {
        interface1.method();
    }

    public void function1(Interface2 interface2) {
        interface2.method1();
    }

    public void function2(Interface2 interface2) {
        interface2.method2();
    }
}

public class B implements Interface1, Interface2 {
    @Override
    public void method1() {
        System.out.println("实现了Interface2的method1");
    }

    @Override
    public void method2() {
        System.out.println("实现了Interface2的method2");
    }

    @Override
    public void method() {
        System.out.println("实现了Interface1的method方法");
    }
}

public class C {
    public void function(Interface2 interface2) {
        interface2.method1();
    }

    public void function1(Interface2 interface2) {
        interface2.method2();
    }

    public void function2(Interface3 interface3) {
        interface3.method3();
    }
}

public class D implements Interface3, Interface2 {
    @Override
    public void method1() {
        System.out.println("实现了Interface2的method1");
    }

    @Override
    public void method2() {
        System.out.println("实现了Interface2的method2");
    }

    @Override
    public void method3() {
        System.out.println("实现了Interface3的method3");
    }
}

public class Test {
    public static void main(String[] args) {
        A a = new A();
        a.function(new B());
        a.function1(new B());
        a.function1(new B());

        C c = new C();
        c.function(new D());
        c.function1(new D());
        c.function2(new D());
    }
}

// 打印结果
实现了Interface1的method方法
实现了Interface2的method1
实现了Interface2的method1
实现了Interface2的method1
实现了Interface2的method2
实现了Interface3的method3







    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值