尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
面向对象六大原则深度解析
Android 面试面向对象六大原则深度解析前言作为一名有多年经验的 Android 开发者在面试中经常会被问到设计原则相关的问题。其中“谈谈你对面向对象六大原则的理解尤其是开闭原则和依赖倒置原则”几乎是必考题。本文结合自己的实战经验对六大原则进行深入剖析并解答一个经典追问“其他五大原则都是开闭原则的体现吗”一、六大原则核心速览面向对象六大设计原则的核心目标只有一个应对软件中的“变化”让代码更易维护、更易扩展。原则核心思想一句话理解开闭原则 (OCP)对扩展开放对修改关闭加功能别改老代码依赖倒置原则 (DIP)依赖抽象而非具体实现面向接口编程里氏替换原则 (LSP)子类必须能无缝替换父类儿子不能坑爹单一职责原则 (SRP)一个类只负责一件事别让类成为“万金油”接口隔离原则 (ISP)接口要小而专一别强迫别人用不需要的方法迪米特法则 (LoD)只和朋友说话减少内部细节暴露二、开闭原则详解面试重点2.1 定义软件实体类、模块、函数应该对扩展开放对修改关闭。核心思想当需求变化时应该通过增加新代码来实现功能而不是修改已有的老代码。改动老代码有引入新 Bug 的风险而稳定运行的代码不应该被频繁触碰。2.2 Android 实战案例案例一自定义 View 扩展系统TextView不支持圆角我们不会去改 SDK 源码而是继承它并重写onDrawpublicclassRoundCornerTextViewextendsTextView{OverrideprotectedvoidonDraw(Canvascanvas){// 通过 Canvas 裁剪实现圆角对原有 TextView 零侵入canvas.clipPath(roundPath);super.onDraw(canvas);}}这就是典型的“对扩展开放对修改关闭”。案例二策略模式处理多类型支付定义支付策略接口每种支付方式独立实现publicinterfacePayStrategy{voidpay(StringorderId,doubleamount,PayCallbackcallback);}publicclassWechatPayimplementsPayStrategy{/*...*/}publicclassAliPayimplementsPayStrategy{/*...*/}新增支付方式时只需新增一个实现类支付管理模块的核心代码完全不动。案例三BaseActivity 模板方法模式publicabstractclassBaseActivityextendsAppCompatActivity{OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(getLayoutResId());initView();initData();}protectedabstractintgetLayoutResId();protectedabstractvoidinitView();protectedabstractvoidinitData();}基类的流程框架对修改关闭子类只需填充具体内容完美符合开闭原则。三、依赖倒置原则详解面试重点3.1 定义高层模块不应该依赖低层模块二者都应该依赖其抽象。 抽象不应该依赖细节细节应该依赖抽象。这条原则彻底颠覆了传统“自顶向下逐层依赖”的设计方式是解耦的核心利器。3.2 Android 实战案例在 MVP 或 MVVM 架构中依赖倒置无处不在// View 层只依赖 Presenter 接口抽象publicclassMainActivityextendsBaseActivityimplementsMainContract.View{privateMainContract.PresentermPresenter;}// Presenter 依赖 Model 接口抽象publicclassMainPresenterimplementsMainContract.Presenter{privateMainContract.ModelmModel;publicMainPresenter(MainContract.Viewview,MainContract.Modelmodel){this.mViewview;this.mModelmodel;}}// Model 的具体实现可以随意替换publicclassMainModelimplementsMainContract.Model{// 可以是网络、数据库、或 Mock 数据}这样做的好处**可测试性**单元测试时轻松 Mock 一个假的 Model**可替换性**换数据库只改 Model 实现View 和 Presenter 无感知四、经典追问其他原则都是开闭原则的体现吗这是一个很有深度的问题。直接回答不完全是但它们是实现开闭原则的核心手段和具体体现。我愿把它们的关系理解为目标和路径。开闭原则是总纲和最终目标其他五大原则是为实现这个目标服务的战术约束。4.1 依赖倒置原则 —— 实现开闭的基石没有依赖倒置开闭原则几乎无从谈起。只有高层和低层都依赖抽象才能在低层变化时不影响高层或者通过扩展新实现来应对变化。4.2 单一职责原则 —— 隔离变化波及开闭原则要求对修改关闭。如果一个类承担了过多职责任何一个职责的变化都可能成为修改它的理由。拆开职责每个类只有一个变化的原因才能做到“改一处而其他不动”。4.3 接口隔离原则 —— 提供精准的扩展粒度臃肿的接口让扩展变味。小而专的接口让新功能的扩展只需实现真正需要的方法这才是“对扩展开放”的最佳姿态。4.4 里氏替换原则 —— 保证扩展安全开闭允许通过子类扩展但如果子类不能无缝替换父类这个“扩展”就会破坏现有逻辑迫使上层为兼容它而修改。LSP 是所有扩展安全运行的基石。4.5 迪米特法则 —— 缩小修改影响面如果一个对象暴露太多内部细节耦合面就大内部变化时所有依赖者都可能要改。迪米特限制知识扩散让变化被限制在小范围内间接支持了“对修改关闭”。五、总结开闭原则是最终愿景是我们追求的理想代码状态。依赖倒置是核心手段通过抽象建立稳定的契约层。单一职责、接口隔离、里氏替换、迪米特法则是具体约束从不同维度保证扩展的可行性与安全性。理解这些原则之间的关系比死记硬背定义重要得多。在实际的 Android 开发中灵活运用它们才能写出经得起需求变更考验的优质代码。如果这篇文章对你有帮助欢迎点赞、收藏、关注你的支持是我持续分享的动力
RELATED

相关推荐

Web开发底层逻辑:MVT架构与URL路由解析

Web开发底层逻辑:MVT架构与URL路由解析

1. 项目概述:为什么一个“老掉牙”的框架概念,至今仍是全栈开发的底层逻辑?你有没有过这种体验:刚学完 HTML、CSS 和 JavaScript,兴致勃勃地写了个个人博客首页,结果发现——想加个“点击加载下一篇文章”功…

📅 2026/8/24 8:24:46
蓝牙5.4音频系统开发:IDC777-1与MKV44F256VLH16实战

蓝牙5.4音频系统开发:IDC777-1与MKV44F256VLH16实战

1. 项目背景与核心组件选型在无线音频传输领域,蓝牙技术始终占据主导地位。随着Bluetooth 5.4标准的推出,特别是LE Audio特性的完善,开发者现在能够构建更高音质、更低功耗的无线音频系统。本项目采用IDC777-1蓝牙模块与MKV44F256VLH16微控制…

📅 2026/8/24 8:24:46
Cisco ACL 配置实战:基于IP与端口的3层访问控制策略

Cisco ACL 配置实战:基于IP与端口的3层访问控制策略

Cisco ACL 配置实战:基于IP与端口的3层访问控制策略在企业网络架构中,不同部门间的服务访问控制是网络安全的核心需求之一。想象这样一个场景:总装分厂的工程师需要查阅零件分厂的工艺文档,但两个分厂间的文件传输服务必须严格隔离…

📅 2026/8/24 8:24:46
MORE NEWS

更多资讯

📰

Tiki-taka算法求解光伏电池参数辨识:Matlab实现与对比

拿到一组光伏电池的I-V测试数据时,真正棘手的往往不是画曲线,而是把单二极管模型里的Iph、Io、n、Rs、Rsh这五个参数从离散的测量点里反演出来。参数辨识这个环节决定了后边的最大功率点预测、阵列建模和MPPT策略仿真能不能准,偏偏目标函数又…

📰

Electron语音工作室跨平台实战:音频性能与打包避坑指南

1. 项目概述:一个跨平台语音工作室的诞生逻辑 VoiceStudio 这个名字乍一听像某家录音棚的挂牌,但放在 Electron 生态里,它立刻显露出另一重身份——一个用 Web 技术栈构建、却能深度触达操作系统底层音频能力的桌面级语音处理工具。我第一次…

📰

Zephyr RTOS本土生态:选型、GD32F103移植与k_poll实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Python批量处理Word作文文档:从.doc提取到智能评估

简介:假如我是孙悟空主题作文范文,doc格式,共1个文件,压缩包大小仅21KB。全文以小学生朱鸿绪的第一人称梦境开头,化身为齐天大圣后,先后用吸尘器追回盗贼赃物、用仙气熄灭印巴战火、用金箍棒制止海啸&#…

📰

定压功放与定阻功放的区别:接线、功率计算与工程选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

新生代管理趋势报告解读:用轻量数据库落地即时反馈与技能透明

简介:这份《2021年新生代管理趋势报告(精华版)》由中智咨询联合预才网发起调研,面向企业管理者、HR及组织发展从业者,聚焦90后、95后新生代员工的职场特征与管理难题。报告基于企业端372份、员工端428份有效样本&#…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬