ISP接口隔离原则

任何层次的软件设计如果依赖了它并不需要的东西,就会带来意料之外的麻烦。ISP强调使用多个特定 的接口,而不是一个总接口,避免依赖不需要的接口。即不需要则不应该知道。

ISP特点

  • 降低耦合度:客户端只依赖它需要的接口,减少对其他接口的依赖,从而降低系统的耦合度。
  • 提高灵活性:接口的拆分使得系统更灵活,可以更容易地扩展和修改。
  • 符合开闭原则:通过接口的细分,可以更好地满足开闭原则,即对扩展开放,对修改封闭。

示例代码

不符合ISP的代码

java 复制代码
// 违反ISP的胖接口
interface WorkerInterface {
    void work();
    void eat();
}

// 机器人不需要吃饭,但被迫实现eat方法
class Robot implements WorkerInterface {
    @Override
    public void work() {
        System.out.println("Working...");
    }

    @Override
    public void eat() {
        throw new UnsupportedOperationException("机器人不需要吃饭");
    }
}

// 人类需要实现所有方法
class Human implements WorkerInterface {
    @Override
    public void work() {
        System.out.println("Working...");
    }

    @Override
    public void eat() {
        System.out.println("Eating...");
    }
}

使用ISP优化后的代码

java 复制代码
interface Workable {
    void work();
}

interface Eatable {
    void eat();
}

// 机器人只需实现Workable
class ImprovedRobot implements Workable {
    @Override
    public void work() {
        System.out.println("Working...");
    }
}

// 人类实现两个接口
class ImprovedHuman implements Workable, Eatable {
    @Override
    public void work() {
        System.out.println("Working...");
    }

    @Override
    public void eat() {
        System.out.println("Eating...");
    }
}

接口隔离与其他设计原则的关系

与单一职责原则(SRP)的关系
  • 联系:SRP 关注类的职责单一,而 ISP 关注接口的职责单一。
  • 区别:SRP 针对实现类,ISP 针对接口。
与依赖倒置原则(DIP)的关系
  • 联系:DIP 要求高层模块依赖抽象接口,而 ISP 确保这些接口是最小化的。
  • 协同效应:结合使用可降低系统耦合度。

在设计中遵循ISP

采用 "客户端驱动" 的接口设计 :

根据客户端需求定义接口,而非根据实现定义接口。这一点非常重要,研发经常是根据实现定义接口,导致接口无限膨胀。

使用接口继承拆分胖接口 :

将大接口拆分为多个小接口,通过继承组合。

优先使用组合而非继承 :

通过组合多个小接口实现复杂功能,避免类继承不必要的方法。

编写单元测试验证接口边界 :

确保客户端只依赖它需要的方法,不依赖多余接口。

参考

《架构整洁之道》-- Robert C.Mattin

《架构师的自我修炼》 -- 李智慧

《设计模式之美》 -- 王争

相关推荐
运维行者_4 小时前
PHP性能监控怎么做?从响应时间到慢函数的6个关键指标
运维·服务器·开发语言·网络·支持向量机·php·接口隔离原则
雪雪爱冲浪5 小时前
ISP代理与住宅代理选型对比:从原理到实战
服务器·网络·网络协议·tcp/ip·接口隔离原则
黑妹天下第一乖2 天前
第 12 讲:阿加犀 AidLux 部署与量产——把端侧 AI 应用做成 7×24 产品
人工智能·嵌入式硬件·数码相机·接口隔离原则·iot
黑妹天下第一乖3 天前
第08讲 · 视觉与相机流水:Spectra ISP 与实时检测
人工智能·嵌入式硬件·数码相机·机器人·接口隔离原则·iot
pride.li8 天前
ISP标定-BLC标定(Black Level Calibration,黑电平校准)
人工智能·计算机视觉·接口隔离原则
kyle~1 个月前
ISP---RAW数据解析:从PixelFormat、Packed_Buffer到Bayer解码
数码相机·接口隔离原则
FLJwu1 个月前
镜头模组与画质量产实战 03:运动相机 ISP 图像调校、杂光鬼影抑制与来料验收标准|20 年源头工厂量产经验
经验分享·数码相机·产品运营·接口隔离原则·相机
kyle~1 个月前
ISP---RAW 成像的物理基础
计算机视觉·接口隔离原则·相机
kyle~1 个月前
ISP--- RAW 图像 从传感器噪声模型到快门时序与频闪效应
人工智能·计算机视觉·接口隔离原则
PHP实战开发录1 个月前
PHP接口参数没变为什么总是验签失败
php·开发·接口隔离原则