java面向对象设计原则之接口隔离原则示例详解

目录
  • 概念
  • 实现
  • 拓展

概念

小接口原则,即每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。如下图所示定义了一个接口,包含了5个方法,实现类A用到了3个方法、实现类B用到了3个方法,类图如下:

类A没有方法4、方法5,却要实现它;类B没有方法2、方法3,但还是要实现这两个方法,不符合接口隔离原则。改造为将其拆分为三个接口,实现方式改为下图所示,符合接口隔离原则:

实现

面向对象机制中一个类可以实现多个接口,通过多重继承分离,通过接口多继承(实现)来实现客户的需求,代码更加清晰易维护。如网上商城系统中,封装一个用户类,完成用户的消费记录、浏览记录等相应的功能,如果是会员还要完成记录会员积分、提现、折扣、会员级别变动等功能;实现精准化广告投放时需要根据用户特征计算用户的消费偏好,则可以做以下设计完成遵循接口隔离原则。

这样设计,普通消费者无需实现会员接口,符合接口隔离原则;

同时在做精准推送时,只需要通过“精准推送”接口定义对象变量;做会员相关操作时,只需使用会员接口定义对象变量,而不是所有的内容通过消费用户定义相关对象变量,代码的可读性大大提高。

拓展

1.接口分离原则也是确保“开-闭”原则的一个重要手段;模块相对独立,通信尽可能少,这样当一个模块修改时,对别的模块的影响很小。
2. 代码清晰易懂,里氏替换和依赖倒置原则更易使用。
3. 语义更加清晰,准确。(如:家里电路需要处理,我们会在劳动力市场找电工(小接口),而不是说找个工人(大接口),这样语义更加清晰,准确)

以上就是java面向对象设计原则之接口隔离原则示例详解的详细内容,更多关于java面向对象设计原则的资料请关注我们其它相关文章!

时间: 2021-10-13

浅谈java中OO的概念和设计原则(必看)

一.OO(面向对象)的设计基础 面向对象(OO):就是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识.理解.刻划客观世界和设计.构建相应的软件系统.面向对象的特征:虽然各种面向对象编程语言相互有别,但都能看到它们对面向对象基本特征的支持, 即 "抽象.封装.继承.多态" : – 抽象,先不考虑细节 – 封装,隐藏内部实现 – 继承,复用现有代码 – 多态,改写对象行为 面向对象设计模式:是"好的面向对象设计",所谓"

Java设计模式常用原则解析

1.单一职责原则 每一个类负责一个职责(一个类只有一个方法) 2.里氏替换原则 所有引用基类的地方都能透明的使用其子类的对象. 问题来了: 比如原来 class A{ fun();//完成P1功能 } 现在需要添加新功能 class B extends A{//A的子类B实现了fun的功能) fun();完成功能为P(原来的P1功能加上新增的P2功能) } 则,在子类B完成新功能P2的时候可能会导致原有功能P1发生故障 解决办法 当使用继承的时候,除了添加新的方法来完成新功能P2之外,尽量不要重

java面向对象设计原则之迪米特法则分析详解

目录 概念 使用 拓展 概念 迪米特法则解决类与类之间耦合度问题,如果类A调用了B类的某一个方法,则这两个类就形成了一种紧耦合的方式,当B类这个方法发生变化时,一定会影响A类的执行结果.迪米特法则要求每一个类尽可能少的与其他类发生关系,也就是尽可能少的让其他类发生变化时,对其代码的执行结果产生的影响降到最低. 典型情况:A类调用B类的方法,B类和C类是一种关联关系,如果A类通过B类所持有的C类对象直接调用C类的方法,则A类和C类同时拥有强耦合的关系.代码如下: public class B {

java面向对象设计原则之单一职责与依赖倒置原则详解

目录 单一职责概念 实现 拓展 依赖倒置原则概念 示例 拓展 单一职责概念 不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,否则就应该把类拆分.交杂不清的职责将使得代码牵一发而动全身,导致代码混涩难懂,不易修改.难以扩展和复用.如:以前开发C/S程序中的胖客户端程序,就是将人机交互逻辑.业务加工处理逻辑和数据库操作逻辑混合在一起. 实现 单一职责原则是进行类的划分和封装的基本原则,进行类的具体抽象.尽量做到,类的功能单一和清晰化. 1.根据机能划分,使用封装来创建对象之间的分

java面向对象设计原则之合成复用原则示例详解

目录 概念 示例 拓展 概念 尽量使用合成/聚合,而不是使用继承实现复用.所谓的合成/聚合是指一个对象里持有另外一个类的对象,通过调用这些对象的方法得到复用已有功能的目的.如:报文解译程序中,按照继承复用可以设计为: 子类调用父类的方法即可完成水文报文解译.气象解译中通用方法:子类中一定包含了父类的方法,这个叫继承复用. 按照合成/聚合原则设计为: 水文协议和气象协议中,持有编码和位制转换对象,通过调用对象方法即可完成复用. 示例 数据库连接的复用:首先看通过集成关系复用数据连接代码如下 pub

java中Servlet监听器的工作原理及示例详解

监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. 监听器原理 监听原理 1.存在事件源 2.提供监听器 3.为事件源注册监听器 4.操作事件源,产生事件对象,将事件对象传递给监听器,并且执行监听器相应监听方法 监听器典型案例:监听window窗口的事件监听器 例如:swing开发首先制造Frame**窗体**,窗体本身也是一个显示空间,对窗体提供监听器,监听窗体方法调用或者属性改变:

浅谈使用Java Web获取客户端真实IP的方法示例详解

Java-Web获取客户端真实IP: 发生的场景:服务器端接收客户端请求的时候,一般需要进行签名验证,客户端IP限定等情况,在进行客户端IP限定的时候,需要首先获取该真实的IP. 一般分为两种情况: 方式一.客户端未经过代理,直接访问服务器端(nginx,squid,haproxy): 方式二.客户端通过多级代理,最终到达服务器端(nginx,squid,haproxy): 客户端请求信息都包含在HttpServletRequest中,可以通过方法getRemoteAddr()获得该客户端IP.

Java面向对象编程中final关键字的使用方法详解

在Java中通过final关键字来声明对象具有不变性(immutable),这里的对象包括变量,方法,类,与C++中的const关键字效果类似. immutable指对象在创建之后,状态无法被改变 可以从三个角度考虑使用final关键字: 代码本身:不希望final描述的对象所表现的含义被改变 安全:final对象具有只读属性,是线程安全的 效率:无法修改final对象本身,对其引用的操作更为高效 final 变量 定义final Object a,则a只能被初始化一次,一旦初始化,a的数据无法

Java中四种线程池的使用示例详解

在什么情况下使用线程池? 1.单个任务处理的时间比较短 2.将需处理的任务的数量大 使用线程池的好处: 1.减少在创建和销毁线程上所花的时间以及系统资源的开销 2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及"过度切换". 本文详细的给大家介绍了关于Java中四种线程池的使用,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: FixedThreadPool 由Executors的newFixedThreadPool方法创建.它是一种线程数量固定的线程

java中最易犯错的特殊字符示例详解

问题背景 能准确说出下面的java 执行完毕后会打印出什么? System.out.println( String.class.getName()+ ".class"); System.out.println( String.class.getName(). replaceAll(".","/") + ".class"); 相信对于第一行,大部分人不会犯错,打印 java.lang.String.class 我们想使用/去分割

Java编程复用类代码详解

本文研究的主要是Java编程中的复用类,那么到底复用类是什么东西,又有什么用法,下面具体介绍. 看了老罗罗升阳的专访,情不自禁地佩服,很年轻,我之前以为和罗永浩一个级别的年龄,也是见过的不是初高中编程的一位大牛之一,专访之后,发现老罗也是一步一个脚印的人.别说什么难做,做不了,你根本就没去尝试,也没有去坚持. If you can't fly then run,if you can't run then walk, if you can't walk then crawl,but whateve

Java基于享元模式实现五子棋游戏功能实例详解

本文实例讲述了Java基于享元模式实现五子棋游戏功能.分享给大家供大家参考,具体如下: 一.模式定义 享元模式,以共享的方式高效地支持大量的细粒度对象.通过复用内存中已存在的对象,降低系统创建对象实例的性能消耗.享元的英文是Flyweight,表示特别小的对象,即细粒度对象. 二.模式举例 1. 模式分析 我们借用五子棋游戏来说明这一模式. 2. 享元模式静态类图 3. 代码示例 3.1 创建抽象棋子一AbstractChessman package com.demo.flyweight.obj

java 正则,object中两个方法的使用(详解)

正则: "."和"\" "."点儿,在正则表达式中表示任意一个字符. "\"在正则表达式中是转意字符,当我们需要描述一个已经被正则表达式使用的特殊字符时,我们就可以通过使用"\"将其转变为原本的意思. "\"在正则表达式中也有一些预定义的特殊内容: \d:表示任意一个数字 \w:表示任意一个单词字符(只能是 数字,字母,下划线) \s:表示任意一个空白字符(\t \r \n \f \x0

Java使用访问者模式解决公司层级结构图问题详解

本文实例讲述了Java使用访问者模式解决公司层级结构图问题.分享给大家供大家参考,具体如下: 一. 模式定义 访问者模式:是表示一个作用于某对象结构中各个元素的操作,它使用户可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二. 模式举例 1 模式分析 我们借用公司层级结构来说明这一模式. 2 访问者模式静态类图 3 代码示例 3.1 抽象员工一Staff package com.demo.structure; import com.demo.visitor.IVisitor; /**

Java使用责任链模式处理学生请假问题详解

本文实例讲述了Java使用责任链模式处理学生请假问题.分享给大家供大家参考,具体如下: 一. 模式定义 在责任链模式中,很多对象由每一个对象对其下家的引用而连接起来,形成一条链.客户端应用请求在这个链上进行传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪个对象最终处理这个请求,这使系统可以在不影响客户端的情况下动态地重新组织链和分配责任. (1)抽象处理者角色:定义出一个处理请求的接口.如果需要,接口可以定义出一个方法,以设定和返回下家的引用.这个角色通常由一个Ja