当前位置: 首页 > article >正文

4 设计模式原则之接口隔离原则

一、接口隔离原则 

1.定义

客户端不应该被迫依赖于它不使用的方法;

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

简单来说,接口隔离原则 强调:

  • 接口应当职责单一,即每个接口只定义一个功能。
  • 不要设计臃肿的接口,应当根据功能拆分为多个小接口。
  • 避免接口污染,让实现类不需要依赖它们不需要的接口方法。

2.代码举例

在代码中,定义了三个接口:

  • AntiTheft(防盗接口)
  • Fireproof(防火接口)
  • Waterproof(防水接口)

然后你实现了两个具体的安全门类:

  • CSDNSafetyDoor 实现了 防盗防火 功能。
  • TheodoreSafetyDoor 实现了 防盗防火防水 功能。
public interface AntiTheft {
    void antiTheft();
}

public interface Fireproof {
    void fireproof();
}

public interface Waterproof {
    void waterproof();
}

public class CSDNSafetyDoor implements AntiTheft,Fireproof{
    @Override
    public void antiTheft() {
        System.out.println("防盗");
    }

    @Override
    public void fireproof() {
        System.out.println("防水");
    }
}

public class TheodoreSafetyDoor implements AntiTheft,Fireproof,Waterproof{
    @Override
    public void antiTheft() {
        System.out.println("防盗");
    }

    @Override
    public void fireproof() {
        System.out.println("防火");
    }

    @Override
    public void waterproof() {
        System.out.println("防水");
    }
}

public class Client {
    public static void main(String[] args) {
        TheodoreSafetyDoor door = new TheodoreSafetyDoor();
        door.antiTheft();
        door.fireproof();
        door.waterproof();
        System.out.println("===================================");
        CSDNSafetyDoor door1 = new CSDNSafetyDoor();
        door1.antiTheft();
        door1.fireproof();
    }
}

3.代码讲解

(1)职责单一化

  • 你的代码很好地遵循了 接口隔离原则。你将 防盗防火防水 三个功能分别定义成了三个独立的接口:AntiTheftFireproofWaterproof
  • 这样设计的好处是,每个接口都有其单一的职责,避免了将多个功能混在一个接口中。假设你将所有功能合并到一个大接口 SafetyDoor 中,这样实现类就会被迫实现所有的方法,即使某些功能它并不需要。

(2)灵活性与扩展性

  • 通过拆分为多个小接口,当我们需要添加新的安全门产品时,可以自由地选择实现不同的接口,而无需实现不必要的功能。例如,假设我们现在需要一个只有防火功能的安全门,我们可以这样实现:
    public class SimpleFireproofDoor implements Fireproof {
        @Override
        public void fireproof() {
            System.out.println("简易防火门");
        }
    }
    
  • 这种设计使得系统具有很强的 灵活性和扩展性,能够轻松地根据需求选择不同的功能组合,而不会影响现有的系统结构。

(3)符合开闭原则

  • 接口设计符合 开闭原则(OCP),系统对扩展开放,对修改封闭。当我们需要添加新的功能(如 防风 功能)时,只需要添加一个新的接口,并在需要的实现类中扩展,而无需修改现有的接口和实现类。

4.总结

  • 拆分接口:将 AntiTheftFireproofWaterproof 分离为独立接口,每个接口只定义一个职责,避免了臃肿的大接口。
  • 避免实现冗余方法:具体实现类如 CSDNSafetyDoorTheodoreSafetyDoor 只依赖它们需要的接口,不会被迫实现不需要的方法。
  • 灵活性和扩展性:可以方便地扩展新的安全门实现类,并选择需要实现的功能接口,而无需修改现有代码,符合开闭原则。
  • 客户端代码:在客户端代码中,我们可以根据需求选择不同的实现类,不会因为接口设计而受到限制,提升了系统的可维护性和可扩展性。

 


http://www.kler.cn/a/400231.html

相关文章:

  • Java 全栈知识体系
  • 在ubuntu上安装ubuntu22.04并ros2 humble版本的docker容器记录
  • 开源项目低代码表单设计器FcDesigner获取表单的层级结构与组件数据
  • 【视觉SLAM】2-三维空间刚体运动的数学表示
  • event_base
  • Linux 命令 | 每日一学,文本处理三剑客之awk命令实践
  • 【开源风云】从若依系列脚手架汲取编程之道(七)
  • 【青牛科技】D7312带 ALC 双通道前置放大器电路
  • C语言常用语句总结
  • 跨平台WPF框架Avalonia教程 三
  • C++20中的Concepts与TypeScript
  • 雨晨 Fix 24H2 Windows 11 iot 企业版 ltsc 2024 极简 2合1 26100.2448
  • Gradle 8 使用教程:Maven 仓库导入、依赖管理与 TOML 配置详解
  • Node.js 中如何实现延迟和超时 ?
  • Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
  • PyTorch使用教程-深度学习框架
  • 第十七天 Scikit-learn入门
  • 【ChatGPT】让ChatGPT生成特定时间段或主题的文章
  • springboot 文件高效上传
  • django-ninja 实现cors跨域请求
  • 蓝桥杯-洛谷刷题-day4(C++)
  • 全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS简介
  • 编程软件---git
  • YOLOv8改进,YOLOv8引入KANConv卷积,CVPR2024,二次创新C2f结构
  • Spring Cloud微服务下如何配置I8n
  • 类与对象(3)