小试接口隔离原则

本文探讨了接口隔离原则,指出客户端不应被迫依赖不需要的接口。通过坏例子展示了鸟类和犬类不必要地实现了它们无法执行的方法,如狗的飞行和鸟的游泳。然后,通过将IAnimal接口拆分为IEat、IFly和ISwim三个独立接口,实现了更好的设计,允许调用方仅实现所需功能,降低了耦合度。该原则与单一职责原则不同,更专注于接口的使用者需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

客户端不应该被强迫依赖它不需要的接口。

其中的“客户端”,可以理解为接口的调用者或者使用者。

方式

在 badexample 中,鸟依赖了会游泳的接口,狗依赖了飞的接口(不合理)。故,对 IAnimal 接口进行细粒度的拆分,在 goodexample 中,将其分成了 IEatIFlyISwim
三个接口,调用方(鸟、狗)可以按需实现自己能用的接口,更加合理。

思考

思考一:接口隔离原则和单一职责原则一样吗?

不太一样。单一职责针对的是模块、类、接口的设计,而接口隔离更针对于接口。此外,单一职责更强调自己的特征和功能是否高度内聚,而接口隔离强调的是针对同一调用方的高内聚不同调用方的低耦合(接口可以理解为方法的集合)

代码

坏设计

你见过会飞的狗吗?

/**
 * 动物接口
 *
 * @author mindartisan.blog.csdn.net
 * @date
 */
public interface IAnimal {

    /**
     * 吃
     */
    void eat();

    /**
     * 飞
     */
    void fly();

    /**
     * 游泳
     */
    void swim();
}
/**
 * 狗
 *
 * @author mindartisan.blog.csdn.net
 * @date
 */
public class Dog implements IAnimal{
    @Override
    public void eat() {

    }

    @Override
    public void fly() {

    }

    @Override
    public void swim() {

    }
}
public class Bird implements IAnimal{
    @Override
    public void eat() {

    }

    @Override
    public void fly() {

    }

    @Override
    public void swim() {

    }
}

好设计

/**
 * 吃接口
 *
 * @author mindartisan.blog.csdn.net
 * @date
 */
public interface IEat {

    /**
     * 吃
     */
    void eat();
}
/**
 * 飞接口
 *
 * @author mindartisan.blog.csdn.net
 * @date
 */
public interface IFly {

    /**
     * 飞
     */
    void fly();
}
/**
 * 游泳接口
 *
 * @author mindartisan.blog.csdn.net
 * @date
 */
public interface ISwim {

    /**
     * 游泳
     */
    void swim();
}
/**
 * 鸟
 *
 * @author mindartisan.blog.csdn.net
 * @date
 */
public class Bird implements IFly,IEat{
    @Override
    public void eat() {

    }

    @Override
    public void fly() {

    }
}
/**
 * 狗
 *
 * @author mindartisan.blog.csdn.net
 * @date
 */
public class Dog implements IEat,ISwim{
    @Override
    public void eat() {

    }

    @Override
    public void swim() {

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值