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

相关推荐
BeyondESH2 小时前
C++—单例设计模式
java·c++·设计模式
林小果12 小时前
桥接模式
java·开发语言·设计模式
湖南罗泽南5 小时前
设计模式之策略模式
设计模式·策略模式
java_heartLake9 小时前
设计模式之观察者模式
java·观察者模式·设计模式
John_ToDebug9 小时前
设计模式之策略模式
c++·设计模式·策略模式
我是回頭呀10 小时前
设计模式之装饰器模式
设计模式·装饰器模式
wy31362282110 小时前
kotlin——设计模式之责任链模式
设计模式·kotlin·责任链模式
林小果110 小时前
观察者模式
java·开发语言·观察者模式·设计模式
anyup_前端梦工厂11 小时前
JS设计模式之组合模式:打造灵活高效的对象层次结构
javascript·设计模式·组合模式
吃海鲜的骆驼11 小时前
六、设计模式-6.1、单例模式
java·单例模式·设计模式·面试