设计模式:3.设计模式的七大原则之二(接口隔离原则)

114 阅读2分钟

接口隔离原则(Interface Segregation Principle)

1.基本介绍

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

2.代码对比

(1) 新建一个画画接口:

/**
 * @ClassName Draw
 * @description 画画接口
 */
public interface Draw {
    /**
     * usePen : 使用钢笔
     */
    void usePen();

    /**
     * usePaper : 使用纸
     */
    void usePaper();

    /**
     * drawBorder : 画边框
     */
    void drawBorder();

    /**
     * drawFull : 填充内容
     */
    void drawFull();
}

(2) 画圆形实现类:

/**
 * @ClassName DrawCirCle
 * @description 画圆形
 */
public class DrawCirCle implements Draw {
    @Override
    public void usePen() {
        System.out.println("画圆: 使用钢笔!");
    }

    @Override
    public void usePaper() {
        System.out.println("画圆: 使用纸!");
    }

    @Override
    public void drawBorder() {
        System.out.println("画圆: 画圆圈边框!");
    }

    @Override
    public void drawFull() {
        System.out.println("画圆: 将圆填充黑色!");
    }
}

(3) 画正方形实现类:

/**
 * @ClassName DrawSquare
 * @description 画正方形
 */
public class DrawSquare implements Draw {
    @Override
    public void usePen() {
        System.out.println("画正方形: 使用钢笔!");
    }

    @Override
    public void usePaper() {
        System.out.println("画正方形: 使用纸!");
    }

    @Override
    public void drawBorder() {
        System.out.println("画正方形: 画正方形边框!");
    }

    @Override
    public void drawFull() {
        System.out.println("画正方形: 将正方形填充黑色!");
    }
}

(4) 新建类画图形1

/**
 * @ClassName DrawPic1
 * @description 画图形1类:一个圆圈
 */
public class DrawPic1 {
    public void doDrawPic1(Draw draw){
         draw.usePen();
         draw.usePaper();
         draw.drawBorder();
     }
}

(5) 新建类画图形2

/**
 * @ClassName DrawPic2
 * @description 画图形2类:一个实心正方形
 */
public class DrawPic2 {

    public void doDrawPic2(Draw draw){
         draw.usePen();
         draw.usePaper();
         draw.drawBorder();
         draw.drawFull();
     }
}

(6) 使用上面的两个画图类

public class DrawPicMain {
    public static void main(String[] args) {
        // 画一个圆圈
        DrawPic1 drawPic1 = new DrawPic1();
        drawPic1.doDrawPic1(new DrawCirCle());  // DrawPic1类通过接口Draw依赖(使用)DrawCirCle类

        // 画一个实心正方形
        DrawPic2 drawPic2 = new DrawPic2();
        drawPic2.doDrawPic2(new DrawSquare());
    }
}

在这里插入图片描述
这几个类的关系图为:
在这里插入图片描述
可以发现,画图形1:圆圈DrawPic1类通过接口依赖(使用)画圆形DrawCircle类,但是只使用了纸、笔、画边框三个方法,画圆形DrawCircle类中的实现的填充内容方法就没有用到,这就是不符合接口隔离原则。
按照接口隔离原则的设计应为:
在这里插入图片描述
即:一个类对另一个类的依赖(依赖),应该建立在最小的接口上。即把大接口拆成多个接口进行隔离。