超详细超实用!!!AI编程之cursor编写设计模式接口隔离原则实例(七)

云风网
云风笔记
云风知识库

一、设计模式接口隔离原则定义

客户端不应该被迫依赖于它不使用的方法,一个类对另一个类的依赖应该建立在最小的接口上。要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

接口隔离原则和单一职责都是为了提高类的内聚性、降低它们之间的耦合性,体现了封装的思想,但两者是不同的:

  1. 单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离。
  2. 单一职责原则主要是约束类,它针对的是程序中的实现和细节;接口隔离原则主要约束接口,主要针对抽象和程序整体框架的构建。

二 、原则作用

  1. 将臃肿庞大的接口分解为多个粒度小的接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。
  2. 接口隔离提高了系统的内聚性,减少了对外交互,降低了系统的耦合性。
  3. 如果接口的粒度大小定义合理,能够保证系统的稳定性;但是,如果定义过小,则会造成接口数量过多,使设计复杂化;如果定义太大,灵活性降低,无法提供定制服务,给整体项目带来无法预料的风险。
  4. 使用多个专门的接口还能够体现对象的层次,因为可以通过接口的继承,实现对总接口的定义。
  5. 能减少项目工程中的代码冗余。过大的大接口里面通常放置许多不用的方法,当实现这个接口的时候,被迫设计冗余的代码。

三、原则实现实例

在具体应用接口隔离原则时,应该根据以下几个规则来衡量。

  1. 接口尽量小,但是要有限度。一个接口只服务于一个子模块或业务逻辑。
  2. 为依赖接口的类定制服务。只提供调用者需要的方法,屏蔽不需要的方法。
  3. 了解环境,拒绝盲从。每个项目或产品都有选定的环境因素,环境不同,接口拆分的标准就不同深入了解业务逻辑。
  4. 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。
1、新建main.java空白文件,cursor输入指令


2、自动生成代码以及文件
2.1、Main.java代码如下:
javascript 复制代码
public class Main {
    public static void main(String[] args) {
        System.out.println("Testing Basic Music Player:");
        MusicPlayer basicPlayer = new BasicMusicPlayer();
        testMusicPlayer(basicPlayer);

        System.out.println("\nTesting Smart Music Player:");
        SmartMusicPlayer smartPlayer = new SmartMusicPlayer();
        testAdvancedMusicPlayer(smartPlayer);
        testVolumeControl(smartPlayer);
    }

    private static void testMusicPlayer(MusicPlayer player) {
        player.play();
        player.stop();
    }

    private static void testAdvancedMusicPlayer(AdvancedMusicPlayer player) {
        player.play();
        player.pause();
        player.next();
        player.previous();
        player.stop();
    }

    private static void testVolumeControl(VolumeControl player) {
        player.setVolume(50);
    }
}
2.2、BasicMusicPlayer .java代码如下:

BasicMusicPlayer 只实现了 MusicPlayer 接口,因为它只支持基本的播放和停止功能。

javascript 复制代码
public class BasicMusicPlayer implements MusicPlayer {
    @Override
    public void play() {
        System.out.println("Basic Music Player: Playing music");
    }

    @Override
    public void stop() {
        System.out.println("Basic Music Player: Stopping music");
    }
}
2.3、SmartMusicPlayer.java代码如下:

SmartMusicPlayer 实现了 AdvancedMusicPlayer 和 VolumeControl 接口,因为它支持更多的功能。

javascript 复制代码
public class SmartMusicPlayer implements AdvancedMusicPlayer, VolumeControl {
    @Override
    public void play() {
        System.out.println("Smart Music Player: Playing music");
    }

    @Override
    public void stop() {
        System.out.println("Smart Music Player: Stopping music");
    }

    @Override
    public void pause() {
        System.out.println("Smart Music Player: Pausing music");
    }

    @Override
    public void next() {
        System.out.println("Smart Music Player: Playing next track");
    }

    @Override
    public void previous() {
        System.out.println("Smart Music Player: Playing previous track");
    }

    @Override
    public void setVolume(int volume) {
        System.out.println("Smart Music Player: Setting volume to " + volume);
    }
}
2.4、AdvancedMusicPlayer .java代码如下:
javascript 复制代码
public interface AdvancedMusicPlayer extends MusicPlayer {
    void pause();
    void next();
    void previous();
}
2.5、VolumeControl.java代码如下:
javascript 复制代码
public interface VolumeControl {
    void setVolume(int volume);
}
3、运行主程序输出

客户端代码(Main 类)可以根据需要使用不同的接口,而不需要依赖于它们不使用的方法。

这种设计允许我们根据设备的实际功能来实现相应的接口,而不是强制所有设备实现所有功能。这就是接口隔离原则的核心思想:客户端不应该被迫依赖于它们不使用的方法。

您可以直接运行这个 Main 类来查看输出结果,这将给您一个直观的了解接口隔离原则如何在实际开发中应用。

相关推荐
数据智能老司机5 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机6 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机6 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机6 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
使一颗心免于哀伤6 小时前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
拳打南山敬老院6 小时前
漫谈 MCP 构建之Resources篇
前端·后端·ai编程
玲小珑6 小时前
LangChain.js 完全开发手册(九)LangGraph 状态图与工作流编排
前端·langchain·ai编程
yaocheng的ai分身16 小时前
Agentic Engineering 实战
ai编程
RainbowSea17 小时前
12. LangChain4j + 向量数据库操作详细说明
java·langchain·ai编程
RainbowSea17 小时前
11. LangChain4j + Tools(Function Calling)的使用详细说明
java·langchain·ai编程