接口隔离原则

这篇具有很好参考价值的文章主要介绍了接口隔离原则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

接口隔离原则

介绍

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

案例引入

A类,通过接口1依赖B类,C类通过依赖接口1依赖D类,A类只会用到1-3方法,C类只会使用到1,4,5方法。

uml类图

接口隔离原则

代码实现
public class Segregation1 {
    public static void main(String[] args) {
        A a = new A();
        a.dependency1(new B());
        a.dependency2(new B());
        a.dependency3(new B());

        C c = new C();
        c.dependency1(new D());
        c.dependency4(new D());
        c.dependency5(new D());
    }
}

interface Interface1{
    public void operation1();
    public void operation2();
    public void operation3();
    public void operation4();
    public void operation5();
}

class B implements Interface1{
    @Override
    public void operation1() {
        System.out.println("B 类 operation1");
    }

    @Override
    public void operation2() {
        System.out.println("B 类 operation2");
    }

    @Override
    public void operation3() {
        System.out.println("B 类 operation3");
    }

    @Override
    public void operation4() {
        System.out.println("B 类 operation4");
    }

    @Override
    public void operation5() {
        System.out.println("B 类 operation5");
    }
}

class D implements Interface1{
    @Override
    public void operation1() {
        System.out.println("D 类 operation1");
    }

    @Override
    public void operation2() {
        System.out.println("D 类 operation2");
    }

    @Override
    public void operation3() {
        System.out.println("D 类 operation3");
    }

    @Override
    public void operation4() {
        System.out.println("D 类 operation4");
    }

    @Override
    public void operation5() {
        System.out.println("D 类 operation5");
    }
}

class A{

    public void dependency1(Interface1 i){
        i.operation1();
    }
    public void dependency2(Interface1 i){
        i.operation2();
    }
    public void dependency3(Interface1 i){
        i.operation3();
    }

}

class C{
    public void dependency1(Interface1 i){
        i.operation1();
    }
    public void dependency4(Interface1 i){
        i.operation4();
    }
    public void dependency5(Interface1 i){
        i.operation5();
    }
}
案例分析
  • 类A通过接口interface1依赖B,类C通过接口依赖D,因为接口interface1对于A类和C类来说,不是最小的接口,就会导致类B,类D去重写使用不到的方法
  • 将接口interface1拆分成独立的接口,类A和C分别和其依赖的接口建立依赖关系。也就是采用接口隔离原则。
  • 接口interface1出现的方法,也拆分成三个接口 如下图所示

案例改进

uml类图

接口隔离原则

public class Segregation2 {
    public static void main(String[] args) {
        A a = new A();
        a.dependency1(new B());
        a.dependency2(new B());
        a.dependency3(new B());

        C c = new C();
        c.dependency1(new D());
        c.dependency4(new D());
        c.dependency5(new D());
    }
}

interface Interface1 {
    public void operation1();
}

interface Interface2{
    public void operation2();
    public void operation3();
}

interface Interface3{
    public void operation4();
    public void operation5();
}


class B implements Interface1,Interface2{
    @Override
    public void operation1() {
        System.out.println("B 类 operation1");
    }

    @Override
    public void operation2() {
        System.out.println("B 类 operation2");
    }

    @Override
    public void operation3() {
        System.out.println("B 类 operation3");
    }
}

class D implements Interface1,Interface3 {
    @Override
    public void operation1() {
        System.out.println("D 类 operation1");
    }

    @Override
    public void operation4() {
        System.out.println("D 类 operation4");
    }

    @Override
    public void operation5() {
        System.out.println("D 类 operation5");
    }
}

class A{

    public void dependency1(Interface1 i){
        i.operation1();
    }
    public void dependency2(Interface2 i){
        i.operation2();
    }
    public void dependency3(Interface2 i){
        i.operation3();
    }

}

class C{
    public void dependency1(Interface1 i){
        i.operation1();
    }
    public void dependency4(Interface3 i){
        i.operation4();
    }
    public void dependency5(Interface3 i){
        i.operation5();
    }
}

这样设计的uml类图,满足了案例A,B,C,D四类需要,也满足了接口隔离原则。
只是为了记录自己的学习历程,且本人水平有限,不对之处,请指正。文章来源地址https://www.toymoban.com/news/detail-671534.html

到了这里,关于接口隔离原则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Kafka源码走读】Admin接口的客户端与服务端的连接流程

    注:本文对应的kafka的源码的版本是trunk分支。写这篇文章的主要目的是当作自己阅读源码之后的笔记,写的有点凌乱,还望大佬们海涵,多谢! 最近在写一个Web版的kafka客户端工具,然后查看Kafka官网,发现想要与Server端建立连接,只需要执行 方法即可,但其内部是如何工作

    2024年02月16日
    浏览(35)
  • Spring 教程—REST 客户端详解(WebClient 、RestTemplate、HTTP 接口)

    Spring框架为调用REST端点提供了以下选择: WebClient - 非阻塞、响应式客户端和 fluent API。 RestTemplate - 带有模板方法API的同步客户端。 HTTP 接口 - 注解式接口,并生成动态代理实现。 WebClient  是一个非阻塞的、响应式的客户端,用于执行HTTP请求。它在5.0中引入,提供了  Re

    2024年02月07日
    浏览(33)
  • 手机银行客户端框架之TMF框架介绍

    腾讯移动开发平台(Tencent Mobile Framework)整合了腾讯在移动产品中开发、测试、发布和运营的技术能力,为企业提供一站式、覆盖全生命周期的移动端技术平台。核心服务包括移动客户端开发组件、H5容器、灰度发布、热更新、离线包、网关服务、消息推送、数据同步、移动

    2024年04月17日
    浏览(33)
  • 基础Redis-Java客户端操作介绍

    Jedis 以Redis命令作为方法名称,学习成本低,简单实用。但是Jedis实例是线程不安全的,多线程环境下需要基于连接池来使用 letture Lettuce是基于Netty实现的,支持同步、异步和响应式编程方式,并且是线程安全的。支持Redis的哨兵模式、集群模式和管道模式。 Redisson Redisson是一

    2024年02月05日
    浏览(40)
  • 双线网络发布服务器以及客户端上网介绍

    实验要求: 1、公司想将自己的服务器双线发布出去。 2、员工可以访问电信和网通的WEB服务器。 配置思路: 1、事先指明公司和电信网通路由器的NAT的内部和外部端口。配置NAT路由器的默认路由。 2、实现公网网络互通。 3、公司配置: 配置访问控制列表 access-list 100 permit

    2024年02月06日
    浏览(57)
  • LuatOS-SOC接口文档(air780E)--mqtt - mqtt客户端

    常量 类型 解释 mqtt.STATE_DISCONNECT number mqtt 断开 mqtt.STATE_SCONNECT number mqtt socket连接中 mqtt.STATE_MQTT number mqtt socket已连接 mqtt连接中 mqtt.STATE_READY number mqtt mqtt已连接 订阅主题 参数 传入值类型 解释 string/table 主题 int topic为string时生效 0/1/2 默认0 返回值 返回值类型 解释 int 消息i

    2024年02月06日
    浏览(31)
  • C++ ModBUS TCP客户端工具 qModMaster 介绍及使用

    QModMaster是一个基于Qt的Modbus主站(Master)模拟器,用于模拟和测试Modbus TCP和RTU通信。它提供了一个直观的图形界面,使用户能够轻松设置和发送Modbus请求,并查看和分析响应数据。 以下是QModMaster工具的一些主要特点和功能:  支持Modbus TCP和RTU:QModMaster可以用作Modbus TCP和

    2024年02月13日
    浏览(31)
  • MySQL运维实战(3.1) MySQL官方客户端使用介绍

    作者:俊达 MySQL是MySQL安装包默认的客户端,该客户端程序通常位于二进制安装包的bin目录中,或者通过rpm安装包安装mysql-community-client,是数据库管理系统的重要组成部分。MySQL客户端不仅仅是一个简单的软件工具,更是连接用户与数据库之间的桥梁,对于有效地使用MySQL数据

    2024年02月03日
    浏览(59)
  • Linux ntpdate命令介绍(校时客户端)(ntp客户端)ubuntu离线安装ntpdate(未封装、高端口号)(知名端口、注册端口、动态端口/私有端口)

    NTPdate是一种在Linux和类Unix系统中同步网络时间协议(NTP)服务器时间的命令行程序。它可以让你的系统时钟与互联网上的标准时间服务器保持一致,从而确保系统时间的准确性。 查询ntp服务器时间: 在开始使用NTPdate之前,我们需要先在系统中安装它。以下是在不同系统中安

    2024年02月04日
    浏览(33)
  • 【实践篇】Redis最强Java客户端(一)之Redisson入门介绍

    1.1.1 起源和历史 Redisson 最初由 GitHub 用户 “mrniko” 创建,并在 Apache 2.0 许可证下发布。它的目标是提供一组强大的工具和 API,帮助开发人员在分布式环境中处理数据,并解决并发和一致性的问题。 Redisson 是一款在 Redis 的基础上实现的 Java 驻内存数据网格(In-Memory Data Grid)

    2024年02月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包