为什么要采用“接口 - 抽象类 - 实现类”这种三层结构? - 浪矢

news/2025/10/5 17:35:01/文章来源:https://www.cnblogs.com/CLGYPYJ/p/19126781

目录
  • 核心思想
  • 各层职责与优势
    • 第一层:接口 (Interface) - 负责“定义契约”,实现“解耦”
    • 第二层:抽象类 (Abstract Class) - 负责“封装通用”,实现“复用”
    • 第三层:实现类 (Implementation Class) - 负责“具体业务”,实现“扩展”
  • 总结

最近看一些开源的代码,发现很多设计都是使用“接口 -> 抽象类 -> 实现类”这种三层结构来最终实现一些业务的设计实现,感觉值得一学。

核心思想

总的来说,采用这种三层结构,是为了构建一个高内聚、低耦合、易于扩展和维护的系统。它通过对不同层次的职责进行划分,应用面向对象的多个设计原则,从而能够应对复杂和多变的业务需求。

各层职责与优势

第一层:接口 (Interface) - 负责“定义契约”,实现“解耦”

接口定义了“能做什么”。它只规定了方法签名,不包含任何实现。

它的核心优势是“解耦”。系统的调用方只依赖于这个稳定的接口,而不关心底层具体实现。这样一来,我们就可以在不改动调用方代码的前提下,随意地更换或增加新的实现策略,这让系统变得非常灵活。

第二层:抽象类 (Abstract Class) - 负责“封装通用”,实现“复用”

抽象类负责实现体系内所有子类都需要的通用逻辑和公共流程。

它的核心优势是“复用”。

  • 一方面 它遵循了 DRY (Don't Repeat Yourself) 原则,将公共代码提取出来,避免了在每个实现类中重复编写,大大降低了维护成本。
  • 另一方面 通过模板方法模式,它还能定义一个固定的算法骨架,确保所有子类都遵循一个规范、正确的处理流程。

第三层:实现类 (Implementation Class) - 负责“具体业务”,实现“扩展”

实现类负责的是最具体、最核心的业务逻辑。每个实现类都应该有单一的职责。

它的核心优势是“扩展”。这完美体现了“开闭原则”。当我们需要增加一种新的业务实现时,我们只需要新增一个实现类,而不需要修改任何已有的代码。

总结

所以,总结来说,这套“接口 -> 抽象类 -> 实现类”的结构,并不是过度设计,通过这三者的协同工作,我们可以构建出一个职责清晰、扩展性强、维护成本低的健壮系统.

接口解耦了“调用”与“实现”。

抽象类复用了“通用”与“流程”。

实现类隔离了“变化”与“稳定”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对外提供 AI 服务的风险:合规视角与 AI 安全围栏落地指南

对外提供人工智能服务,主要风险集中在提示词攻击与越权操控、不当内容输出与内容合规、敏感信息与个人信息泄露,以及算法合规、备案与可审计义务。自2023年《生成式人工智能服务管理暂行办法》实施后,企业需要把“数…

遵义市做网站设计公司苏州关键词优化排名推广

本文转载自:http://blog.sina.com.cn/s/blog_9a06890901014ol1.html PHP页面跳转一、header()函数 header函数中Location类型的标头是一种特殊的header调用,常用来实现页面跳转 注意:1、location和“:”号间不能有空格,否则不会跳…

网络安全工具与社区讨论月报

本文记录了r/netsec网络安全社区月度讨论帖,包含成员分享的常用安全工具如Burp Suite和Nuclei,以及社区规则和最新动态,为安全从业者提供实用参考。r/netsec 月度讨论与工具分享帖 社区介绍 /r/netsec 是一个由社区…

机器人运动未来与人机交互研究

本文探讨了机器人运动与人机长期交互的前沿研究,包括机器人意图信号系统、机器学习在机器人感知中的应用,以及大规模实验环境对机器人技术发展的重要性。机器人运动未来与人机交互研究 移动机器人正日益普及:它们在…

欧拉路径 欧拉图 小记

欧拉路径 & 欧拉图 小记 P7771 【模板】欧拉路径 欧拉路径:一个图中经过每条边恰好一次的路径,允许经过重复点。 欧拉回路:起点与终点相同的欧拉路径。 对于连通图,欧拉路径有如下判定:对于无向图,恰好有两个…

OI 笑传 #16

The Taste of Kindness指差す先はインナーワールド 1 ABC423F 终于会了不用二项式反演的做法。 我们把这种东西叫什么好呢?预处理容斥系数? 首先这题是不能一般容斥的,因为我们求解的不是并集,而是独立集。 哎哎独…

课后知识整理

课后知识整理Java方法动手动脑与实验问题全记录 静态导入实验 实验:随机数 Math.random() 局限性 (int)(Math.random()*6) 只能生成 0–5,而不能公平生成 1–6。 Random 带种子实验 实验:

cf296b

CF296B Yaroslav and Two Strings link 题意 给定两个由数字和 ? 组成的字符串 \(s,t\),将 ? 替换为数字。若 \(s,t\) 中有 \(s_i>w_i,s_j<w_j(1\leq i,j\leq n)\),则是一种合法的替换。求合法的方案数对 \(…

昆山做网站费用个人工作室怎么注册

这个教程会教您如何设计发光斑驳的字体特效&#xff0c;会教您运用PS滤镜和纹理图片&#xff0c;同时也诠释了如何运用笔刷和图层样式给最终的字体效果增添光感。来&#xff0c;先看看最终效果&#xff01;第一步&#xff1a;创建一个1024*768的新文档。前景色#532118&#xff…

云原生与DevOps融合实践:加速企业数字化转型的加速器 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

第一次使用Ttpora

MarkDown使用教学 两个井号创建二级标题 一个井号创建一级标题就是最上边的那个 字体 两边都加星号,字体就变成黑色了 两边都加星号,字体就变成黑色了 两边都加两个星号,字体就变成黑色了 两边加一个型号,变成斜体…

Apache反向代理

“apache2 网站静态文件” = /var/www/html/ Apache 本身就可以作为一个反向代理服务器来使用,通常是通过 mod_proxy 及其附加模块来实现。 下面是启用 Apache 反向代理的基本步骤: 1. 启用必要的模块 你需要启用以下…

原版 Sunshine+虚拟显示器实现熄屏串流

Sunshine 基地版 是一个很好的软件,自带了虚拟显示器,能够非常方便地实现熄屏串流,但有一个 bug,它会在串流结束后自动开启虚拟显示器的 HDR 功能:https://github.com/qiin2333/Sunshine-Foundation/issues/13 很…

一流的嘉兴网站建设最牛的视频网站建设

目录 第一章&#xff1a;Java Web基础知识1.介绍3.Java Web基本概念 4.常见面试问题第二章&#xff1a;Java Web核心概念和技术1.介绍3.Servlet和JSP4.Web安全5.常见面试问题 第三章&#xff1a;Java Web高级概念和技术1.介绍3.Spring框架4.安全性5.常见面试问题 第四章&#x…

2025国庆Day4

模拟赛 T1 简单做法: 发现本题所有运算全是加法 直接记录c,s之和 转移即可 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<…

苏宁易购网站建设目标成视频网址多少?

场景&#xff1a; 平台&#xff1a;win7 x64。显卡很差的电脑&#xff0c;使用ffmpeg录屏&#xff0c;鼠标闪烁的几乎看不到。录屏实现方法是使用ffmpeg&#xff0c;源采用的是gdigrab。 解决方法&#xff1a; 安装screen capture recorder安装ffmpeg&#xff0c;执行命令ff…

郑州网站开发公司电话网站在线优化

简介&#xff1a; 融合流量网关与微服务网关的下一代网关—云原生网关来啦&#xff01;优势满满&#xff01; 流量网关和微服务网关必须分开构建吗&#xff1f; 在容器技术和 K8s 主导的云原生时代&#xff0c;这个命题正浮现出新的答案。 更经济&#xff1a;将流量网关与微…

gis坐标计算

package cn.service.hspd.utils;import com.alibaba.fastjson2.JSON;import java.awt.geom.Point2D; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import ja…

Spring AI Alibaba + Nacos 动态 MCP Server 代理方案 - 详解

Spring AI Alibaba + Nacos 动态 MCP Server 代理方案 - 详解2025-10-05 16:58 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !import…

trick 小记

备忘录数据范围可以 \(n^2\) 算法且不考虑顺序的情况下可以连续段 dp要仔细检查数组是否开小,线段树最少 4 倍,建边的数组看条数,一般情况下开 2m,注意看数据范围时 \(k\times 10^x\) 的形式,一数组两用直接开到 …