设计模式7大原则——接口隔离原则解析(含代码示例)

从零开始学习信号完整性(SIPI)--1 简介 信号完整性就是研究如何让驱动芯片发出的信号经过传输通道被接收芯片正确接收的学问。 信号完整性包含了三个要素: 信号:是被传输的主体,我们首先要了解、熟悉信号的特性。 芯片:分为驱动芯片和接收芯片,信号完整性工程师就是要实现信号在驱动芯片和接收芯片之间的正确传输。 传输通道:是传输信号的介质,是信号所走的“路”。如何实现信号的正确传输呢?那就要信号完整性工程师为信号“修路”、“搭桥”。 阅读详情

一、定义 

客户端不应该依赖它不需要的接口,即 一个类对另一个类的依赖应该建立在最小的接口 上 。

通俗的来说就是,不要在一个接口里面放很多的方法,这样会显得这个类很臃肿不堪。接口应该尽量细化,一个接口对应一个功能模块,同时接口里面的方法应该尽可能的少,使接口更加轻便灵活。

注意点:

大家不要把接口隔离原则和单一职责原则相弄混。接口隔离原则和单一职责原则的审视角度是不同的,单一职责原则要求类和接口职责单一,注重的是职责,是业务逻辑上的划分,而接口隔离原则要求方法要尽可能的少,是在接口设计上的考虑。

二、案例解析

还是用我们之前说过的娱乐圈举例吧,假设现在有星探1和星探2要找美女明星。他们的评判标准不太一样,星探1觉得:身材好、面容姣好就是美女,星探2觉得气质好的女生就是美女。

下面我们开始写代码

我们定义美女接口,代码如下:

//美女接口
public interface IPettyGirl {
    //要有姣好的面孔
    public void goodLooking();
    //要有好身材
    public void niceFigure();
    //要有气质
    public void greatTemperament();
}

//接口的实现类
public class PettyGirl implements IPettyGirl {
    private String name;

    public PettyGirl(String  name){  
      this.name= name;
    }
  
//脸蛋漂亮
public void goodLooking() {
  System.out.println(this.name + "---脸蛋很漂亮!"); 
}

//气质要好
public void greatTemperament() {
      System.out.println(this.name + "---气质非常好!");
}

//身材要好
public void niceFigure() {
      System.out.println(this.name + "---身材非常棒!");
   }
}

下面我们写出两个星探代码。

//星探的抽象
public abstract class AbstractSearcher {

    protected IPettyGirl pettyGirl;

    public AbstractSearcher(IPettyGirl pettyGirl){
        this.pettyGirl = pettyGirl;
   }
     //搜索美女, 列出美女信息
    public abstract void show();
}

//星探1实现类,他以为身材好、面容姣好就是美女
public class Searcher1 extends AbstractSearcher{

     public Searcher(IPettyGirl pettyGirl){
         super(pettyGirl);
   }

    //展示美女的信息
    public void show(){
        System.out.println("--------美女的信息如下:---------------");
         //展示面容
        super.pettyGirl.goodLooking();
         //展示身材
        super.pettyGirl.niceFigure();
      }
}

//星探1实现类,他以为气质好就是美女
public class Searcher2 extends AbstractSearcher{

     public Searcher(IPettyGirl pettyGirl){
         super(pettyGirl);
   }

    //展示美女的信息
    public void show(){
        System.out.println("--------美女的信息如下:---------------");
          //展示气质
        super.pettyGirl.greatTemperament();
      }
}

//下面是客户端代码
public class Client {
      //搜索并展示美女信息
      public static void main(String[] args) {
      //定义一个美女
      IPettyGirl xiaoMei = new PettyGirl("小美");
      AbstractSearcher searcher1 = new Searcher1(yanYan);
      searcher1.show();
     AbstractSearcher searcher2 = new Searcher2yanYan);
      searcher2.show();
    }
}

写完后,感觉还不错,但是这么设计不是最优代码。IPrettyGirl接口中包含了太多的功能,按照这个接口设计,所有的女人都要实现这三个方法,那所有女人岂不是都是美女?而且Searcher1和Search2二个类也仅仅使用了接口中的部分功能,这就违背了接口隔离原则。下面我们对这个接口拆分一下,代码如下:

public interface IGoodBodyGirl {
     //要有姣好的面孔
     public void goodLooking();
     //要有好身材
     public void niceFigure();
}

public interface IGreatTemperamentGirl {
    //要有气质
    public void greatTemperament();
}
//女孩1:身材,面容,气质都很好
public class PettyGirl1 implements IGoodBodyGirl,IGreatTemperamentGirl {
   ...
     中间实现方法略
   ...
}
   //女孩2:身材,面容很好
public class PettyGirl2 implements IGoodBodyGirl {
   ...
     中间实现方法略
   ...
}

这样设计是不是就灵活多了呢?经过重新设计,程序变得更加灵活,这就是接口隔离原则的强大之处。

PS:注意接口隔离原则的辩证关系

接口设计的粒度越小,系统越灵活,这是不争的事实,但是灵活的同时也带来了结构的复杂化,开发难度的增加,可维护性降低。所以这个度要进行权衡。

好了,就先分享到这里,关注我,java学习不头秃,还为每位粉丝准备了一份全面的资料福利,从面试简历模板到大厂面经汇总,从大厂内部技术资料到互联网高薪必读书单,以及Java面试核心知识点(283页)和Java面试题合集2022年最新版(485页)等等,有需要的可以点下方名片领取

专项1.CCS代码补全与快捷键优化全攻略 本文全面解析CCS开发环境的代码补全功能与快捷键优化技巧,包括内容辅助触发机制、快捷键自定义配置、编码效率提升方法等实用内容。通过详细步骤指导开发者优化CCS配置,实现高效的代码自动补全和个性化快捷键设置,显著提升嵌入式开发效率。 阅读详情

相关推荐

Clarity 3D Layout

Clarity 3D Layout Clarity 3D layout是3D 全波电磁场模型提取工具,它可以导入已经设计好的PCB文件也可以直接在Clarity 3D layout创建版图进行3D 全波电磁场模型提取。

m0_53280471的博客 5485

接口隔离原则(Interface Segregation Principle)

2.4.1 基本介绍 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。 先看一张图: (1)类 A 通过接口Interface1依赖类 B,类 C 通过接口Interface1依赖类 D,如果接口 Interface1 对于类A 和类C来说不是最小接口,那么类B 和类D 必须去实现他们不需要的方法。(B、D的空心箭头代表实现,B和D都实现了Interface1,这样它们就得实现Interface1中的所有方法)(本图就违反了接口隔离原则) (2)按隔离原则应当这.

wu_l_v的博客 910

E5071C 网络分析仪使用指南

E5071C 网络分析仪是 Keysight(原 Agilent)推出的一款高性能矢量网络分析仪,广泛应用于射频(RF)和微波(MW)电路设计、天线测试、滤波器优化等领域。它以高精度、宽频率范围(9 kHz–20 GHz)、出色的动态范围和灵活的测量功能著称。本文将详细介绍 E5071C 的基本操作方法,帮助用户快速上手并高效使用该设备。

2501_90901792的博客 4191

【设计模式】七大设计原则--------接口隔离原则

接口隔离原则

北极星的博客 885

Clang Static Analyzer 使用教程:本地 + CMake + GitHub Actions 自动静态分析实战

本文介绍了ClangStaticAnalyzer静态代码分析工具的使用方法。该工具基于Clang/LLVM,可检测C/C++代码中的内存泄漏、空指针等常见错误。主要内容包括:安装指南(Ubuntu/macOS/Windows)、命令行使用方法、CMake项目集成方案、GitHub Actions自动化分析配置,以及HTML报告生成与查看。文章还提供了官方资源链接,帮助开发者系统掌握从本地调试到持续集成的完整静态分析工作流,提升代码质量保障能力。适用于需要在开发过程中实施静态分析的C/C++项目。

u014358031的博客 2159

YOLO26改进策略【Head】| (独家改进)轻量化检测头:利用 EfficientNet 中的移动倒置瓶颈模块 MBConv 改进检测头

本文记录的是基于移动倒置瓶颈 MBConv 的 YOLO26 的检测头轻量化改进方法研究。采用了独特的倒置瓶颈结构,通过的操作以及,在高效提取特征的同时极大地降低了计算量。本文将的设计优势融入j检测头中,使其在目标检测任务中不仅能够更精准地识别各类目标,还能在计算资源有限的情况下快速响应,展现出更为卓越的实时检测能力。EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks的实现代码如下: 首先在代码中加入如下代码: 其

Limiiiing的博客 292

六大设计模式原则-接口隔离原则

一、接口隔离原则定义 接口隔离原则定义如下: 接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。 二、接口隔离原则描述 根绝接口隔离原则,当一个接口太大时,我们需要将它分割成一些细小的接口,使用该接口的客户端只需知道与之相关的方法即可。每一个接口应该承担一种相对独立的角色,不干不该干的事情,干该干的事请。这里的"接口"往往有两种不同的定义:一种是指一个类型所具有的方法特征的集合,仅仅是一种

qq_34222160的博客 7754

【科研绘图系列】R语言绘制代谢物与临床表型相关性的森林图

本研究通过森林图展示了特定代谢物与三种临床比较之间的相关性分析结果。这种方法不仅直观地展示了每个代谢物的效应大小和不确定性,还允许我们比较不同代谢物在不同临床比较中的影响。森林图的结果表明,某些代谢物在特定临床比较中显示出显著的相关性,这可能为理解疾病的代谢机制提供了重要线索。

专注生信领域 566

软件设计七大原则:(四)接口隔离原则

一、接口隔离原则简介 用多个专门的接口,而不再使用单一的总接口,客户端不应该依赖它 不需要的接口。 一个类对一个类的依赖应该建立在最小的接口上。 建立单一接口,不要建立庞大臃肿的接口。 尽量细化接口,接口中的方法尽量少。 注意:注意适度原则,一定要适度,过大的话会增加耦合性,而过小的话会增加复杂性和开发成本。 优点:符合我们常说的高内聚低耦合的设计思想,从而使得类具有很好的可读性、可扩展性和可维护性。 二、代码实现 ...

Evan's Blog ٩(๑❛ᴗ❛๑)۶ 2134

剪映自动化工具来了:AI帮你自动剪辑成片

🎬分享一个剪映自动化剪辑工具!AI 自动帮你完成从写文案、配音、加字幕、选音乐、上特效到最终导出的整套流程🎈

XiaoqiangClub的博客 859

华为OD新系统机试真题-8位LED控制器(C/C++/Py/Java/Js/Go)

华为OD新系统机试真题【8位LED控制器】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统4月19号机试真题【8位LED控制器】

qq_45776114的博客 605

设计模式之七大原则(三)——接口隔离原则、迪米特法则、组合/聚合复用原则

接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。根绝接口隔离原则,当一个接口太大时,我们需要将它分割成一些细小的接口,使用该接口的客户端只需知道与之相关的方法即可。每一个接口应该承担一种相对独立的角色,不干不该干的事情,干该干的事请。这里的"接口"往往有两种不同的定义:一种是指一个类型所具有的方法特征的集合,仅仅是一种逻辑上的抽象;

qq_44307209的博客 1923

华为OD机考双机位C卷 - 最左侧冗余覆盖子串 (Java)

华为OD机考双机位C卷 - 最左侧冗余覆盖子串 (Java), 提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 59

设计模式的7大原则

其实不过是什么设计模式,都会尽量的遵循这最为核心的七大原则,那么是哪七大原则呢? 花了大把时间总结如果 对你有帮助清点赞,白嫖者 三天之内必得痔疮 一.设计模式常用的七大原则有: 1) 单一职责原则 2) 接口隔离原则 3) 依赖倒转(倒置)原则 4) 里氏替换原则 5) 开闭原则 6) 迪米特法则 7) 合成复用原则 诶?这几个是什么意思呢? 不用怕,我给大家逐一来介绍一下 1.单一职责原则 对类来说的,即一个类应该只负责一项职责。如类A...

qq_44065088的博客 9599

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【设计模式7大原则详解】

设计模式七大原则深度刨析理解

为者常成,行者常至 1027

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

设计模式7大原则与UML类图详解

本文深入探讨了设计模式的七大原则,并结合UML类图进行详细解析。设计模式的七大原则包括:单一职责原则(一个类应只有一个职责)、开放封闭原则(对扩展开放,对修改关闭)、里氏替换原则(子类应能替换父类而不影响程序)、接口隔离原则(客户端不应依赖不需要的接口)、依赖倒置原则(高层模块不应依赖低层模块,二者都应依赖抽象)。通过UML类图,文章展示了如何在实际代码中应用这些原则,例如将打印功能从Book类分离到BookPrinter类,或通过接口隔离避免不必要的依赖。这些原则有助于提高代码的灵活性、可维护性和可扩展性

DeL的博客 1499

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

设计模式七大原则(案例解析)

一、 设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好 1) 代码重用性 (即:相同功能的代码,不用多次编写) 2) 可读性 (即:编程规范性, 便于其他程序员的阅读和理解) 3) 可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护) 4) 可靠性 (即:当我们增加新的功能后,对原来的功能没有影响) 5) 使程序呈现高内聚,低耦合的特性 二. 设计模式七大原则 ...

Android系统优化 4711

设计模式七大原则

设计模式遵循的原则设计模式七大原则1 设计模式的目的2 设计模式七大原则2-1 单一职责原则(Single Responsibility Principle, SRP)2-2 接口隔离原则(Interface Segregation Principle, ISP)2-3 依赖倒转原则(Dependency Inversion Principle, DIP)2-4 里氏代换原则(Liskov Sub...

weixin_44040023的博客 3560

C# 设计模式七大原则深度解析:构建优雅代码的基石

设计模式的七大原则(SOLID + 另外两个常用原则)是面向对象设计的灵魂,它们指导我们构建灵活、可维护、可扩展的软件系统。本文我们先了解设计模式的七大原则,每个原则都会详细说明,提供示意图和C#代码示例。

2404_88212162的博客 1623

设计模式的7大原则(设计模式6大设计原则增强版)

设计模式(Design Pattern)是经过高度抽象化的在编程中可以被反复使用的代码设计经验的总结。 正确使用设计模式能有效提高代码的可读性、可重用性和可靠性,编写符合设计模式规范的代码不但有利于自身系统的稳定、可靠,还有利于外部系统的对接。在使用了良好的设计模式的系统工程中,无论是对满足当前的需求,还是对适应未来的需求,无论是对自身系统间模块的对接,还是对外部系统的对接,都有很大的帮助。 ...

码农博士的博客 1683

设计模式六大原则:接口隔离原则

目录:   设计模式六大原则:单一职责原则   设计模式六大原则:接口隔离原则   设计模式六大原则:依赖倒置原则   设计模式六大原则:里氏替换原则   设计模式六大原则:迪米特法则   设计模式六大原则:开闭原则 接口隔离原则(Interface Segregation Principle):   1、客户端不应依赖它不需要的接口   2、类间的依赖关系应该建立在最小的接口上   其实通俗来理解就是,不要在一个接口里面放很多的方法,这样会显得这个类很臃肿。接口应该尽量细化,一个接口对应一个...

Unknowncheats的博客 241

设计模式的7大设计原则和GOF 23种设计模式整理

设计模式的7大原则是软件设计的“基石”,核心目标是提高代码的和,降低模块间耦合,让系统更灵活、更易迭代。

不经一番寒彻骨,怎得梅花扑鼻香。 1338

设计模式之6大设计原则详解

1、单一职责原则 There should never be more than one reason for a class to change. 理解:不同的类具备不同的职责,各司其职。做系统设计是,如果发现有一个类拥有了两种职责,那么就要问一个问题:可以将这个类分成两个类吗?如果真的有必要,那就分开,千万不要让一个类干的事情太多。 总结:一个类只承担一个职责 2、开放封闭原则 Soft...

数据知道的博客 3万+

设计模式——设计模式简介和七大原则

设计模式的目的和核心原则、单一职责原则、接口隔离原则、依赖倒转原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则

种一棵树最好的时间是十年前,其次是现在 2633

设计模式:7大原则加例子

文章目录1. 前言2. UML类图2.1 泛化(Generalization)2.2 实现(Realization)2.3 依赖(Dependency)2.4 关联(Association)2.5 组合(Composite)2.6 聚合(Aggregation)3. 其他原则3.1 单一责任原则3.2 接口隔离原则3.3 依赖倒置(倒转)原则3.4 里氏替换原则3.5 开闭原则3.6 迪米特原则3.7 合成复用原则4. 总结5. 设计模式 因为疫情回不了校,5月份打算学设计模式,《HeadFirst设计模

flunggg的博客 1174

设计模式——七大原则(接口隔离原则)

接口隔离原则 基本介绍 Clients should not be forced to depend upon interfaces that they don’t use. (客户端不应该依赖它不需要的接口。) The dependency of one class to anotherone should depend on the smallest possible interface...

qq_42306951的博客 306
上一篇: 设计模式7大原则——迪米特法则解析(含源码示例)
下一篇: 腾讯程序员跳槽,两个月面试一圈只收到了京东offer……
架构文摘JGWZ
博客等级 码龄5年 8808粉丝 345原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值