网站做edi认证有用没,公众号怎么开通申请,网站怎么做移动图片大全,网站建设框架模板云风网 云风笔记 云风知识库
一、设计模式接口隔离原则定义 客户端不应该被迫依赖于它不使用的方法#xff0c;一个类对另一个类的依赖应该建立在最小的接口上。要为各个类建立它们需要的专用接口#xff0c;而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。 接口…云风网 云风笔记 云风知识库
一、设计模式接口隔离原则定义 客户端不应该被迫依赖于它不使用的方法一个类对另一个类的依赖应该建立在最小的接口上。要为各个类建立它们需要的专用接口而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。 接口隔离原则和单一职责都是为了提高类的内聚性、降低它们之间的耦合性体现了封装的思想但两者是不同的
单一职责原则注重的是职责而接口隔离原则注重的是对接口依赖的隔离。单一职责原则主要是约束类它针对的是程序中的实现和细节接口隔离原则主要约束接口主要针对抽象和程序整体框架的构建。
二 、原则作用
将臃肿庞大的接口分解为多个粒度小的接口可以预防外来变更的扩散提高系统的灵活性和可维护性。接口隔离提高了系统的内聚性减少了对外交互降低了系统的耦合性。如果接口的粒度大小定义合理能够保证系统的稳定性但是如果定义过小则会造成接口数量过多使设计复杂化如果定义太大灵活性降低无法提供定制服务给整体项目带来无法预料的风险。使用多个专门的接口还能够体现对象的层次因为可以通过接口的继承实现对总接口的定义。能减少项目工程中的代码冗余。过大的大接口里面通常放置许多不用的方法当实现这个接口的时候被迫设计冗余的代码。
三、原则实现实例 在具体应用接口隔离原则时应该根据以下几个规则来衡量。 接口尽量小但是要有限度。一个接口只服务于一个子模块或业务逻辑。为依赖接口的类定制服务。只提供调用者需要的方法屏蔽不需要的方法。了解环境拒绝盲从。每个项目或产品都有选定的环境因素环境不同接口拆分的标准就不同深入了解业务逻辑。提高内聚减少对外交互。使接口用最少的方法去完成最多的事情。
1、新建main.java空白文件cursor输入指令 2、自动生成代码以及文件
2.1、Main.java代码如下
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 接口因为它只支持基本的播放和停止功能。
public class BasicMusicPlayer implements MusicPlayer {Overridepublic void play() {System.out.println(Basic Music Player: Playing music);}Overridepublic void stop() {System.out.println(Basic Music Player: Stopping music);}
}2.3、SmartMusicPlayer.java代码如下
SmartMusicPlayer 实现了 AdvancedMusicPlayer 和 VolumeControl 接口因为它支持更多的功能。
public class SmartMusicPlayer implements AdvancedMusicPlayer, VolumeControl {Overridepublic void play() {System.out.println(Smart Music Player: Playing music);}Overridepublic void stop() {System.out.println(Smart Music Player: Stopping music);}Overridepublic void pause() {System.out.println(Smart Music Player: Pausing music);}Overridepublic void next() {System.out.println(Smart Music Player: Playing next track);}Overridepublic void previous() {System.out.println(Smart Music Player: Playing previous track);}Overridepublic void setVolume(int volume) {System.out.println(Smart Music Player: Setting volume to volume);}
}2.4、AdvancedMusicPlayer .java代码如下
public interface AdvancedMusicPlayer extends MusicPlayer {void pause();void next();void previous();
}2.5、VolumeControl.java代码如下
public interface VolumeControl {void setVolume(int volume);
}3、运行主程序输出
客户端代码Main 类可以根据需要使用不同的接口而不需要依赖于它们不使用的方法。 这种设计允许我们根据设备的实际功能来实现相应的接口而不是强制所有设备实现所有功能。这就是接口隔离原则的核心思想客户端不应该被迫依赖于它们不使用的方法。
您可以直接运行这个 Main 类来查看输出结果这将给您一个直观的了解接口隔离原则如何在实际开发中应用。