接口隔离原则(ISP)

目录

一、要点

1.避免肿大接口

2.专用接口

3.降低依赖性

4.灵活性和可扩展性

5.遵循单一职责原则

二、示例


接口隔离原则(Interface Segregation Principle, ISP)是面向对象设计中的七大基本原则之一(通常合称为 SOLID 原则)。它强调接口设计的重要性,主要体现在减少类间的依赖和提高系统的灵活性与可维护性。

一、要点

1.避免肿大接口

接口应该小而专一,尽量避免创建包含过多方法的庞大接口。每个接口应只包含客户端所需要的方法。

2.专用接口

多个特定客户端应该拥有各自专用的接口,而不是共享一个通用的接口。这样可以提高模块之间的独立性。

3.降低依赖性

实现一个接口的类不应该依赖它不需要的方法。通过细化接口,可以减少类与类之间的依赖,降低系统的复杂性。

4.灵活性和可扩展性

小的接口使得系统更灵活,更易于扩展和维护。如果需要新增功能,只需添加新接口,而不会影响到已有的代码。

5.遵循单一职责原则

每个接口应该只关注一项功能,使得其实现类能够更专注于某一具体的实现,提升代码的可读性和可维护性。

二、示例

假设有一个动物接口Animal,包含多个方法

java 复制代码
interface Animal {  
    void eat();  
    void fly();  
    void swim();  
}

在这个设计中,不同的动物类(如狗、鸟、鱼)都需要实现这个接口,而大多数动物并不具备所有的能力。这种设计使得实现这些类时,需要提供无用的方法实现,增加了复杂性:

java 复制代码
interface Eater {  
    void eat();  
}  

interface Flyer {  
    void fly();  
}  

interface Swimmer {  
    void swim();  
}

然后,各个动物类只需实现它们所需的接口:

java 复制代码
class Dog implements Eater {  
    @Override  
    public void eat() {  
        System.out.println("Dog is eating");  
    }  
}  

class Bird implements Eater, Flyer {  
    @Override  
    public void eat() {  
        System.out.println("Bird is eating");  
    }  

    @Override  
    public void fly() {  
        System.out.println("Bird is flying");  
    }  
}  

class Fish implements Eater, Swimmer {  
    @Override  
    public void eat() {  
        System.out.println("Fish is eating");  
    }  

    @Override  
    public void swim() {  
        System.out.println("Fish is swimming");  
    }  
}
相关推荐
EXI-小洲3 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
2601_961901704 小时前
SpringBoot使用Nacos进行application.yml配置管理
java·spring boot·spring
何以解忧,唯有..4 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
QQ_21696290965 小时前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端
前端 贾公子6 小时前
第09章:上下文与记忆 (2)
java·服务器·前端
2601_962203516 小时前
Java进阶07集合(续)
java·开发语言
郑州光合科技余经理6 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
roman_日积跬步-终至千里7 小时前
【数据治理(6)】DataOps 不是调度工具,而是让数据产品长期可信的运行机制
java·服务器·网络
workflower7 小时前
人形机器人灵巧手产业链
人工智能·设计模式·机器人·云计算·无人机
落魄大学生之流水线上谋生计7 小时前
LangGraph 基本用法指南
java·windows·python·langchain