当前位置: 首页 > news >正文

设计模式-接口隔离原则

基本介绍

  1. 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上
  2. 先看一张图:

  1. 类A通过接口Interface1 依赖类B,类C通过接口Interface1 依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要的方法。
  2. 按隔离原则应当这样处理:

将接口Interface1拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则

传统代码

/*** @author zhupanlin* @version 1.0* @description: TODO* @date 2024/4/9 10:47*/
public class Segregation1 {public static void main(String[] args) {}}interface Interface1 {void operation1();void operation2();void operation3();void operation4();void operation5();
}
class B implements Interface1{@Overridepublic void operation1() {System.out.println("B 实现了 operation1");}@Overridepublic void operation2() {System.out.println("B 实现了 operation2");}@Overridepublic void operation3() {System.out.println("B 实现了 operation3");}@Overridepublic void operation4() {System.out.println("B 实现了 operation4");}@Overridepublic void operation5() {System.out.println("B 实现了 operation5");}
}class D implements Interface1{@Overridepublic void operation1() {System.out.println("D 实现了 operation1");}@Overridepublic void operation2() {System.out.println("D 实现了 operation2");}@Overridepublic void operation3() {System.out.println("D 实现了 operation3");}@Overridepublic void operation4() {System.out.println("D 实现了 operation4");}@Overridepublic void operation5() {System.out.println("D 实现了 operation5");}
}// A类通过接口Interface 依赖(使用)B类,但是只会用到1,2,3方法
class A {public void depend1(Interface1 i){i.operation1();}public void depend2(Interface1 i){i.operation2();}public void depend3(Interface1 i){i.operation3();}
}// C类通过接口Interface 依赖(使用)D类,但是只会用到1,4,5方法
class C{public void depend1(Interface1 i){i.operation1();}public void depend4(Interface1 i){i.operation4();}public void depend5(Interface1 i){i.operation5();}
}

应传统方法的问题和使用接口隔离原则改进

类A通过接口Interface1依赖类B,类C通过接口Interface1 依赖类D,如果接口Interface1 对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要的方法

将接口Interface1拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则

接口Interface1中出现的方法,根据实际情况拆分为三个接口

代码示例:

/*** @author zhupanlin* @version 1.0* @description: TODO* @date 2024/4/9 10:47*/
public class Segregation1 {public static void main(String[] args) {}}interface Interface1 {void operation1();void operation2();void operation3();void operation4();void operation5();
}
class B implements Interface1{@Overridepublic void operation1() {System.out.println("B 实现了 operation1");}@Overridepublic void operation2() {System.out.println("B 实现了 operation2");}@Overridepublic void operation3() {System.out.println("B 实现了 operation3");}@Overridepublic void operation4() {System.out.println("B 实现了 operation4");}@Overridepublic void operation5() {System.out.println("B 实现了 operation5");}
}class D implements Interface1{@Overridepublic void operation1() {System.out.println("D 实现了 operation1");}@Overridepublic void operation2() {System.out.println("D 实现了 operation2");}@Overridepublic void operation3() {System.out.println("D 实现了 operation3");}@Overridepublic void operation4() {System.out.println("D 实现了 operation4");}@Overridepublic void operation5() {System.out.println("D 实现了 operation5");}
}// A类通过接口Interface 依赖(使用)B类,但是只会用到1,2,3方法
class A {public void depend1(Interface1 i){i.operation1();}public void depend2(Interface1 i){i.operation2();}public void depend3(Interface1 i){i.operation3();}
}// C类通过接口Interface 依赖(使用)D类,但是只会用到1,4,5方法
class C{public void depend1(Interface1 i){i.operation1();}public void depend4(Interface1 i){i.operation4();}public void depend5(Interface1 i){i.operation5();}
}

相关文章:

  • CountDownLatch 详解
  • Java基础知识总结(48)
  • 106. 跑步锻炼(结果填空)
  • 蓝桥杯 2022 省 B 洛谷 P8787 砍竹子
  • Terminal常见快捷命令(持续更新)
  • 利用Leaflet + React:构建WEBGIS
  • 2024第十九届中国(温州)机械装备展9月20-22日举行
  • IDEA 宝贝插件
  • 靡语IT:Bootstrap 简介
  • 【Vue】组件
  • 集合类多线程(JUC)
  • Redis 的主从复制、哨兵和cluster集群
  • 腾讯云短暂崩溃2小时
  • Leetcode 150. 逆波兰表达式求值和Leetcode 55. 跳跃游戏
  • 原型设计模式的学习
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • docker-consul
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Git初体验
  • Koa2 之文件上传下载
  • LeetCode29.两数相除 JavaScript
  • SpiderData 2019年2月23日 DApp数据排行榜
  • 阿里云前端周刊 - 第 26 期
  • 对象管理器(defineProperty)学习笔记
  • 回流、重绘及其优化
  • ------- 计算机网络基础
  • 今年的LC3大会没了?
  • 设计模式走一遍---观察者模式
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 微信公众号开发小记——5.python微信红包
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 阿里云重庆大学大数据训练营落地分享
  • # 飞书APP集成平台-数字化落地
  • #define,static,const,三种常量的区别
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $(function(){})与(function($){....})(jQuery)的区别
  • (02)vite环境变量配置
  • (Git) gitignore基础使用
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (理论篇)httpmoudle和httphandler一览
  • (力扣)循环队列的实现与详解(C语言)
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (十六)一篇文章学会Java的常用API
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (学习日记)2024.01.19
  • (一)UDP基本编程步骤
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .cfg\.dat\.mak(持续补充)
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...