title:
author: 隔壁老于
abbrlink: ’98e21303′
tags:

  • 设计原则
  • 接口隔离原则
  • JAVA
    categories:
  • JAVA
    cover: ‘https://qiniu.gebilaoyu.club/blog/20200302/i1x5RxiH72Xz.png’

date: 2020-03-02 18:32:00

定义:

用多个专门的接口,而不是使用单一的总接口,客户端不应该依赖它不需要的接口.

注意:

一个类对应一个类的依赖应该建立在最小的接口上;

建立单一接口,不要建立庞大臃肿的解耦;

尽量细化接口,不要建立庞大臃肿的解耦;

注意适度原则;

优点:

符合高内聚、低耦合的设计思想,从而使得类具有很好的可读性,可扩展性和可维护性.

代码实践:

假设有开始设计所有动物的功能为一个总接口 具有eat fly dig功能 子类Mouse和Sparrow需要实现对应的功能

/**
 * Created by 于占峰 on 2020/3/2/002.
 * 动物接口
 */
public interface Animal {

    public void eat();
    public void fly();
    public void dig();
}



/**
 * Created by 于占峰 on 2020/3/2/002.
 */
public class Mouse implements  Animal{
    @Override
    public void eat() {
        System.out.println("老鼠在进食");
    }

    @Override
    public void fly() {
        System.out.println("老鼠不会飞....");
    }

    @Override
    public void dig() {
        System.out.println("老鼠在挖洞");
    }
}


/**
 * Created by 于占峰 on 2020/3/2/002.
 */
public class Sparrow implements  Animal{
    @Override
    public void eat() {
        System.out.println("麻雀在进食");
    }

    @Override
    public void fly() {
        System.out.println("麻雀在飞翔");
    }

    @Override
    public void dig() {
        System.out.println("麻雀不会挖洞...");
    }
}
mark

当实际实现时会发现子类需要实现本不应该属于的功能,这样就造成了不必要的依赖,这时就需要对接口进行拆分

/**
 * Created by 于占峰 on 2020/3/2/002.
 * 
 */
public interface Dig {
    public void dig();
}

/**
 * Created by 于占峰 on 2020/3/2/002.
 */
public interface Eat {
    //吃
    public void eat();
}

/**
 * Created by 于占峰 on 2020/3/2/002.
 */
public interface Fly {
    //飞翔
    public void fly();
}

/**
 * Created by 于占峰 on 2020/3/2/002.
 */
public class Sparrow implements Eat,Fly {
    @Override
    public void eat() {
        System.out.println("麻雀在进食");
    }

    @Override
    public void fly() {
        System.out.println("麻雀在飞翔");
    }
}

/**
 * Created by 于占峰 on 2020/3/2/002.
 */
public class Vole implements Eat,Dig {
    @Override
    public void eat() {
        System.out.println("田鼠在进食");
    }

    @Override
    public void dig() {
        System.out.println("田鼠在挖洞");
    }
}

拆分后的类图:

mark

重新拆分后代码就符合高内聚、低耦合的设计思想,具有很好的可读性,可扩展性和可维护性.