Android源码设计模式解析与实战第2版笔记(一)

第一章 走向灵活软件之路 — 面向对象的六大原则

优化代码的第一步 — 单一职责原则

  • 单一职责原则的英文名称是Single Responsibility Principle,缩写是SRP
    • SRP:就一个类而言,应该仅有一个引起它变化的原因。

image.png

  • 一个类中应该是一组相关性很高的函数、数据的封装

让程序更稳定、更灵活 — 开闭原则

  • 开闭原则的英文全称是 Open Close Principle,缩写是 OCP,它是 Java 世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统。
    • 开闭原则:软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是,对于修改是封闭的。

    • 当软件需要变化时,我们应该尽量通过扩展的方式来实现变化,而不是通过修改已有的代码来实现。

image.png

构建扩展性更好的系统 — 里氏替换原则

  • 里氏替换原则英文全称是Liskov Substitution Principle,缩写是LSP
    • 里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象。

image.png

让项目拥有变化的能力 — 依赖倒置原则

  • 依赖倒置原则英文全称是 Dependence Inversion Principle,缩写是DIP

    • 依赖倒置原则指代了一种特定的解耦形式,使得高层次的模块不依赖于低层次模块的实现细节的目的,依赖模块被颠倒了。
  • 依赖倒置原则有以下几个关键点:

    • 高层模块不应该依赖低层模块,两者都应该依赖其抽象
    • 抽象不应该依赖细节
    • 细节应该依赖抽象
  • 依赖倒置原则Java语言中的表现就是:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。

系统有更高的灵活性 — 接口隔离原则

  • 接口隔离原则英文全称是 InterfaceSegregation Principles,缩写是ISP

    • ISP:类间的依赖关系应该建立在最小的接口上。
  • 接口隔离原则目的系统解开耦合,从而容易重构、更改和重新部署。

更好的可扩展性 — 迪米特原则

  • 迪米特原则英文全称为Law ofDemeter,缩写是LOD,也称为最少知识原则(Least KnowledgePrinciple)
    • 迪米特原则:一个对象应该对其他对象有最少的了解。

image.png

经过重构:

image.png

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

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

相关文章

SpringBoot操作Jedis

SpringBoot操作Jedis 1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://ma…

【机组】单元模块实验的综合调试与驻机键盘和液晶显示器的使用方式

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《机组 | 模块单元实验》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 1. 综合实验的调试 1.1 实验…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Swiper容器组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Swiper容器组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Swiper容器组件 滑块视图容器&#xff0c;提供子组件滑动轮播显示的能力。…

RHCE 给openlab搭建web网站

目录 网站需求&#xff1a; 一、准备工作 二、创建www.openlab.com 三、创建教学资料子网站www.openlab.com/data 四、创建学生信息子网站http://www.openlab.com/student/ 五、创建缴费子网站www.openlab.com/money 网站需求&#xff1a; 1.基于域名www.epenlab.com可以…

微信小程序(十九)组件通信(子传父)

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.定义触发事件向父组件传输数据 2.父组件绑定绑定触发事件并获取数据 源码&#xff1a; myNav.wxml <view class"navigationBar custom-class" style"padding-top: {{test}}px;">&l…

让B端管理软件既美观又实用的解决方案来了

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 让B端管理软件既美观又实用的解决方案来了 在当今数字化时代&#xff0c;B端管理软件已…

API网关-Apisix RPM包方式自动化安装配置教程

文章目录 前言一、简介1. etcd简介2. APISIX简介3. apisix-dashboard简介 二、Apisix安装教程1. 复制脚本2. 增加执行权限3. 执行脚本4. 浏览器访问5. 卸载Apisix 三、命令1. Apisix命令1.1 启动apisix服务1.2 停止apisix服务1.3 优雅地停止apisix服务1.4 重启apisix服务1.5 重…

docker部署常用命令

centos安装docker https://docs.docker.com/engine/install/centos/ 修改iptables&#xff08;重要&#xff01;&#xff01;&#xff01;&#xff09; step1:修改iptables配置vim /lib/systemd/system/docker.serviceExecStart/usr/bin/dockerd -H fd:// --containerd/run/…

CAD-autolisp(三)——文件、对话框

目录 一、文件操作1.1 写文件1.2 读文件 二、对话框DCL2.1 初识对话框2.2 常用对话框界面2.2.1 复选框、列表框2.2.2 下拉框2.2.3 文字输入框、单选点框 2.3 Lisp对dcl的驱动2.4 对话框按钮实现拾取 一、文件操作 1.1 写文件 代码示例(defun c:writefile();getfiled函数&…

用Visual Studio Code创建JavaScript运行环境【2024版】

用Visual Studio Code创建JavaScript运行环境 JavaScript 的历史 JavaScript 最初被称为 LiveScript&#xff0c;由 Netscape&#xff08;Netscape Communications Corporation&#xff0c;网景通信公司&#xff09;公司的布兰登艾奇&#xff08;Brendan Eich&#xff09;在 …

[C++开发 03_2/2 _ STL(185)]

知识点1&#xff1a;STL初始 概述&#xff1a; STL是标准模板库的意思&#xff0c;STL从广义上来讲分为&#xff1a;容器&#xff0c;算法&#xff0c;迭代器。 容器算法之间通过迭代器进行无缝连接。 知识点2&#xff1a;STL初始 2.1 STL诞生 C中面向对象的三大特性&#xff1…

YARN介绍

1 概念 YARN 是一个资源管理、任务调度的框架&#xff0c;主要包含三大模块&#xff1a;ResourceManager&#xff08;RM&#xff09;、 NodeManager&#xff08;NM&#xff09;、ApplicationMaster&#xff08;AM&#xff09;。其中&#xff0c;ResourceManager 负责所有资 源…