接口隔离原则

定义

接口隔离原则是指,一个类不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。
意思大致是指,一个类不需要某个接口中的全部方法,就不要依赖这个接口,而去依赖能满足该类并方法最少的接口。总之就是拆复杂接口。

示例

反例

//接口隔离原则  示例1
//类A通过接口interface1依赖类B,调用B的1,2,3方法
//类C通过接口interface1依赖类D,调用D的1,4,5方法
//具体依赖关系可查看对应的uml类图
//示例1违背了接口隔离原则

/*
* 上方描述的关系中,如果按照接口隔离原则应该这样处理
* 将接口interface1拆分为几个独立的接口,类A与类C分别与他们需要的接口建立依赖关系,也就是使用接口隔离原则。
* */

public class InterfaceSeperatePrinciple1 {
    public static void main(String[] args) {

    }
}
interface interface1{
    void operation1();
    void operation2();
    void operation3();
    void operation4();
    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 depend1(interface1 b){
        b.operation1();
    }
    public void depend2(interface1 b){
        b.operation2();
    }
    public void depend3(interface1 b){
        b.operation3();
    }
        }
class C{

    public void depend1(interface1 d){
        d.operation1();
    }
    public void depend4(interface1 d){
        d.operation4();
    }
    public void depend5(interface1 d){
        d.operation5();
    }
}

正例

//接口隔离原则示例2
//将接口interface2拆分为3个接口
//关系仍然为类A通过interface2依赖B,类C通过interface2依赖D
//本类实现了接口隔离原则

/*
* 接口隔离原则的目的
* 接口隔离原则是为了约束接口,降低类对接口的依赖
*
* 1.将复杂的接口拆分为多个粒度小的接口,是为了应对外来变更,提高系统的灵活性及可维护性
* 2.接口隔离原则提高了系统的内聚性,减少了对外交互,降低了系统的耦合性
* 3.接口粒度大小定义合理,能够保证系统的稳定性,粒度过小,会使接口数量过多,设计复杂化,粒度过大,灵活性及可维护性变差
* 4.使用多个专门的接口还能体现对象的层次,因为通过接口的继承,可实现对总接口的定义
* 5.能减少项目中的代码冗余,过大的接口中会存放一些不会使用的方法,当实现接口时,会被迫实现这个方法
* 总结好处:
* 灵活,可维护,高内聚,低耦合,减少代码冗余
*
*
*
* */
public class InterfaceSeperatePrinciple2 {
    public static void main(String[] args) {
        A1 a1=new A1();
        a1.depend1(new B1());
        a1.depend2(new B1());
        a1.depend3(new B1());
        C1 c1=new C1();
        c1.depend1(new D1());
        c1.depend4(new D1());
        c1.depend5(new D1());
    }
}
interface interface2{
    void operation1();
}
interface interface3{
    void operation2();
    void operation3();
}
interface interface4{
    void operation4();
    void operation5();
}
class B1 implements interface2,interface3{

    @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 D1 implements interface2,interface4{

    @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 A1{
    public void depend1(interface2 i){
        i.operation1();
    }
    public void depend2(interface3 i){
        i.operation2();
    }
    public void depend3(interface3 i){
        i.operation3();
    }
}
class C1{
    public void depend1(interface2 i){
        i.operation1();
    }
    public void depend4(interface4 i){
        i.operation4();
    }
    public void depend5(interface4 i){
        i.operation5();
    }
}

接口隔离原则总结

接口隔离原则是为了约束接口,降低类对接口的依赖。
接口隔离原则的优点:
1)灵活性,可维护性增强
2)高内聚,低耦合
3)减少代码冗余(减少了方法的实现)
4)体现对象层次

posted @ 2022-01-21 18:50  杨远  阅读(470)  评论(0编辑  收藏  举报