首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【AI驱动的接口隔离:解锁智能设计模式新维度】

【AI驱动的接口隔离:解锁智能设计模式新维度】

作者头像
ImAileen
发布2024-12-25 08:28:16
发布2024-12-25 08:28:16
15600
代码可运行
举报
运行总次数:0
代码可运行

前言

本文主要介绍的是软件设计原则中的接口隔离原则。

接口隔离原则

含义

  • 接口隔离原则:指的是客户端不应该被迫依赖于它不使用的方法;
  • 一个类对另一个类的依赖应该建立在最小的接口上。

概念有些抽象让我们逐句理解一下:

  • 上图中B类继承了A类,就拥有了方法1的功能,但是B类现只需要实现方法1的功能,不需要方法2的功能,被迫依赖于他不使用的方法2.
  • 我们可以看到改进以后,A类的方法被拆成两个接口,这使得C类可以根据自己的需求去实现对应方法的接口,无需被迫依赖于它不使用的方法。

案例实现

  • 下面看一个安全门案例来理解接口隔离原则:
  • 我们需要创建一个黑马品牌的安全门,该安全门具有防火、防水、防盗的功能。可以将防火,防水,防盗功能提取成一个接口,形成一套规范。类图如下:

实现代码

代码语言:javascript
代码运行次数:0
运行
复制
/**
 * @Description:安全门接口
 */
public interface SafetyDoor {
    //防盗
    void antiTheft();
    //防火
    void fireProof();
    //防水
    void waterProof();
}
代码语言:javascript
代码运行次数:0
运行
复制
public class AileenSafetyDoor implements SafetyDoor{
    @Override
    public void antiTheft() {
        System.out.println("防盗");
    }

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

    @Override
    public void waterProof() {
        System.out.println("防水");
    }
}
  • 测试类
代码语言:javascript
代码运行次数:0
运行
复制
public class ClientTest {
    public static void main(String[] args) {
        AileenSafetyDoor door = new AileenSafetyDoor();
        door.antiTheft();
        door.fireProof();
        door.waterProof();
    }
}
运行结果:
  • 通过运行结果我们可以看到,我们的防盗门实现了接口的所有功能,但是如果我们想要创建一个只有防火防水功能的安全门的话就不能直接调用安全门这个接口,因为他会被迫实现防盗这个功能,和我们的预期是不符的。
    • 为了满足预期,我们将根据接口隔离原则来实现,如下所示:

接口隔离原则的使用

  • 我们将安全门这个接口里面的方法拆分成多个具体接口,然后根据需求去实现这些接口,就不会发生强迫现象,以下是AileenSafetyDoor的具体代码实现:

具体实现代码

  • 接口:
代码语言:javascript
代码运行次数:0
运行
复制
package principles.InterfaceIsolation.after;
/**
 * @Description:防盗接口
 */
public interface AntiTheft {
    void antiTheft();
}
代码语言:javascript
代码运行次数:0
运行
复制
package principles.InterfaceIsolation.after;
/**
 * @Description:防火接口
 */
public interface Fireproof {
    void fireproof();
}
代码语言:javascript
代码运行次数:0
运行
复制
package principles.InterfaceIsolation.after;
/**
 * @Description:防水接口
 */
public interface Waterproof {
    void waterproof();
}
  • Aileen安全门
代码语言:javascript
代码运行次数:0
运行
复制
package principles.InterfaceIsolation.after;

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

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

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

    }
}
  • 测试类
代码语言:javascript
代码运行次数:0
运行
复制
package principles.InterfaceIsolation.after;

public class ClientTest {
    public static void main(String[] args) {
        AileenSafetyDoor door = new AileenSafetyDoor();
        door.antiTheft();
        door.fireproof();
        door.waterproof();
    }
}

其它门的使用

  • 现在我们可以根据需求去实现其它门,比如说西门子门,它只有防火防盗的功能,我们就可以直接创建这个门的类并调用防火和防盗的接口即可,然后去实现其对应的功能,无需修改其它的类。
    • 具体实现代码如下:
代码语言:javascript
代码运行次数:0
运行
复制
package principles.InterfaceIsolation.after;

public class XimengziDoor implements AntiTheft , Fireproof{
    @Override
    public void antiTheft() {
        System.out.println("西门子版防盗");
    }

    @Override
    public void fireproof() {
        System.out.println("西门子版防火");
    }
}
代码语言:javascript
代码运行次数:0
运行
复制
package principles.InterfaceIsolation.after;

public class ClientTest {
    public static void main(String[] args) {
        AileenSafetyDoor door = new AileenSafetyDoor();
        door.antiTheft();
        door.fireproof();
        door.waterproof();

        System.out.println("==========================");

        XimengziDoor xidoor = new XimengziDoor();
        xidoor.antiTheft();
        xidoor.fireproof();
    }
}

运行结果

总结

  • 接口隔离原则帮助我们设计更灵活、解耦的系统,避免了不必要的接口依赖。
  • 在实际开发中,应当避免定义过于庞大和笼统的接口,而是尽量将接口拆分成小而精的单一功能接口,确保客户端只依赖于它所需要的功能。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 接口隔离原则
    • 含义
    • 案例实现
    • 实现代码
      • 运行结果:
    • 接口隔离原则的使用
    • 具体实现代码
    • 其它门的使用
    • 运行结果
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档