超详细超实用!!!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 类来查看输出结果,这将给您一个直观的了解接口隔离原则如何在实际开发中应用。

相关推荐
Tadas-Gao1 小时前
Java设计模式全景解析:从演进历程到创新实践
java·开发语言·微服务·设计模式·云原生·架构·系统架构
饕餮争锋11 小时前
设计模式笔记_行为型_观察者模式
笔记·观察者模式·设计模式
程序员X小鹿12 小时前
腾讯出手!重磅发布CloudBase AI CLI,集Claude Code等5大AI CLI于一体!从开发到部署!(附教程)
ai编程
狠活科技14 小时前
平替 Claude Code,API接入 GPT-5,Codex CLI 国内直接使用教程
chatgpt·ai编程·oneapi
我命由我1234514 小时前
软件开发 - 避免过多的 if-else 语句(使用策略模式、使用映射表、使用枚举、使用函数式编程)
java·开发语言·javascript·设计模式·java-ee·策略模式·js
long31614 小时前
java 策略模式 demo
java·开发语言·后端·spring·设计模式
汤姆大聪明15 小时前
【软件设计模式】前置知识类图、七大原则(精简笔记版)
笔记·设计模式
麦兜*16 小时前
【swift】SwiftUI动画卡顿全解:GeometryReader滥用检测与Canvas绘制替代方案
服务器·ios·swiftui·android studio·objective-c·ai编程·swift
饕餮争锋19 小时前
设计模式笔记_行为型_策略模式
笔记·设计模式·策略模式
易元19 小时前
模式组合应用-桥接模式(一)
后端·设计模式