当前位置:首页 > 科技  > 软件

接口隔离原则,到底什么需要隔离?

来源: 责编: 时间:2024-07-03 17:16:29 1205观看
导读通过前面的文章,SRP限制一个类的变化来源应该是单一的;OCP要求不要随意修改一个类;LSP则规范了类的继承关系。那么接口隔离原则会给我们带来什么惊喜呢?今天我们就来聊一聊。什么是接口隔离?接口隔离原则,Interface segrega

通过前面的文章,SRP限制一个类的变化来源应该是单一的;OCP要求不要随意修改一个类;LSP则规范了类的继承关系。那么接口隔离原则会给我们带来什么惊喜呢?今天我们就来聊一聊。uSg28资讯网——每日最新资讯28at.com

uSg28资讯网——每日最新资讯28at.com

什么是接口隔离?

接口隔离原则,Interface segregation principle(ISP),也是 Robert C. Martin提出的 SOLID原则中的一种,老规矩,还是先看看作者 Robert C. Martin 对接口隔离原则是如何定义的:uSg28资讯网——每日最新资讯28at.com

Clients should not be forced to depend upon interfaces that they do not use.

在作者对接口隔离原则的定义中强调:不应强迫客户依赖他们不使用的接口。uSg28资讯网——每日最新资讯28at.com

在 Java中,我们一直都强调要面向接口编程,足以看出接口在 Java中的重要性。其实, 与单一职责原则类似,接口隔离原则的目标是通过将软件拆分为多个独立的部分来减少所需更改的副作用和频率。uSg28资讯网——每日最新资讯28at.com

这里的"不应强迫"该如何理解?通常来讲"不应强迫" 有2种理解:uSg28资讯网——每日最新资讯28at.com

  • 第一种理解是用户不能被强迫使用整个接口。
  • 第二种理解是用户只使用接口中的部分方法,其余的方法不能被强迫使用。

显然,第二种理解比较合理,所以接口隔离原则可以更直白一点的表达成:在接口中,不要放置接口使用者不需要的方法。uSg28资讯网——每日最新资讯28at.com

站在接口使用者的角度,这样的设计更加人性化,为什么要增加一些我不需要的依赖负担呢?uSg28资讯网——每日最新资讯28at.com

如何实现接口隔离?

假如有一个业务场景,需要定义一个交通工具的 Transportation类,类中包含设置基本信息(价格,颜色),启停以及飞行等方法:uSg28资讯网——每日最新资讯28at.com

public interface Transportation{    void setPrice(double price);    void setColor(String color);    void start();    void stop();    void fly();}

汽车属于一种交通工具,因此我们可以定义一个 Car类去实现 Transportation类,代码如下:uSg28资讯网——每日最新资讯28at.com

public class Car implements Transportation {    @Override    public void setPrice(double price) {       // 价格设置逻辑    }    @Override    public void setColor(String color) {        // 颜色设置逻辑    }    @Override    public void start(){        // 启动逻辑    }    @Override    public void stop(){        // 停止逻辑    }    @Override    public void fly(){        // 飞行逻辑    }}

从上面的代码可以发现一个问题:Car不能飞行却要实现 fly()方法,为什么?显然 fly()这个方法是 Car这种交通工具不需要关注的,这就违反了接口隔离原则。uSg28资讯网——每日最新资讯28at.com

如何解决这个问题呢?uSg28资讯网——每日最新资讯28at.com

首先,我们将交通工具接口分成多个角色接口,每个角色接口用于特定的行为,在这里我们可以将 Transportation分成 BasicFeature、 Movable、Flyable 三类行为接口。uSg28资讯网——每日最新资讯28at.com

// 基本属性, 价格,颜色public interface BasicFeature{    void setPrice(double price);    void setColor(String color);}// Movable 行为, 行驶和停止public interface Movable {    void start();    void stop();}// 飞行 行为public interface Flyable {    void fly();}

而 Car只需要关注基本属性和 Movable行为,代码如下:uSg28资讯网——每日最新资讯28at.com

public class Car implements BasicFeature, Movable {    @Override    public void setPrice(double price) {        // 价格设置逻辑    }    @Override    public void setColor(String color) {        // 颜色设置逻辑    }    @Override    public void start(){        // 启动逻辑    }    @Override    public void stop(){        // 停止逻辑    }}

Airplane飞机需要关注基本属性,Movable行为和飞行行为,代码如下:uSg28资讯网——每日最新资讯28at.com

public class Airplane implements BasicCFeature, Movable, Flyable {    @Override    public void setPrice(double price) {        // 价格设置逻辑    }    @Override    public void setColor(String color) {        // 颜色设置逻辑    }    @Override    public void start(){        // 启动逻辑    }    @Override    public void stop(){        // 停止逻辑    }    @Override    public void fly(){        // 飞行逻辑    }}

通过上面的拆解,我们可以看到每种交通工具只需要关注自己需要的接口就好了,自己不需要的接口就不会被强迫关注,更加不会造成 Car能 fly()这样不常见的误区。uSg28资讯网——每日最新资讯28at.com

接口隔离和单一职责的比较

接口隔离原则和单一职责原则都是 SOLID设计原则中的重要组成部分,虽然它们有一些相似之处,但它们关注的重点和应用的范围有所不同,在实际开发中,很容易搞混淆,因此,这里对这两个原则做详细比较。uSg28资讯网——每日最新资讯28at.com

  • 关注点不同 单一职责原则(SRP):关注类的职责划分,确保每个类只有为一类行为负责,它主要解决的是类内部职责过多导致的复杂性问题。接口隔离原则(ISP):关注接口的设计,确保客户端只依赖于它们实际需要的方法。它主要解决的是接口过于庞大导致的依赖问题。
  • 作用范围不同 单一职责原则(SRP):作用于类的设计和实现层面,通过分离职责提高类的内聚性。接口隔离原则(ISP):作用于接口的设计层面,通过细化接口减少客户端的依赖,提高系统的灵活性。
  • 实现方法不同 单一职责原则(SRP):通过将一个类的多种职责分离成多个独立的类来实现。接口隔离原则(ISP):通过将一个大接口分解为多个小接口,让不同的客户端依赖于不同的小接口来实现。

因此,接口隔离原则是在遵守单一职责原则的前提下,将接口更加细化。uSg28资讯网——每日最新资讯28at.com

总结

接口隔离可以提高代码的可读性、可维护性和灵活性,减少系统的耦合度,在实际开发中,合理应用接口隔离原则,可以帮助我们创建高质量的代码和系统。然而,在应用时需要注意适度细化和明确职责,避免过度设计和接口混乱。uSg28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-98549-0.html接口隔离原则,到底什么需要隔离?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C++ this 指针到底是个什么特殊的指针

下一篇: 利用Spring Boot 3.x与消息中间件RabbitMQ实现火车购票系统实时票务信息同步与更新

标签:
  • 热门焦点
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。近期
  • 猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对“势”的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • iQOO Neo8 Pro即将开售:到手价3099元起 安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • 中关村论坛11月25日开幕,15位诺奖级大咖将发表演讲

    11月18日,记者从2022中关村论坛新闻发布会上获悉,中关村论坛将于11月25至30日在京举行。本届中关村论坛由科学技术部、国家发展改革委、工业和信息化部、国务
Top