【HeadFirst系列之HeadFirst设计模式】第1天之HeadFirst设计模式开胃菜

news2025/1/10 12:10:36

HeadFirst设计模式开胃菜

前言

在这里插入图片描述
在这里插入图片描述

从今日起,陆续分享《HeadFirst设计模式》的读书笔记,希望能够帮助大家更好的理解设计模式,提高自己的编程能力。

今天要分享的是【HeadFirst设计模式开胃菜】,主要介绍了设计模式的基本概念、设计模式的四人组、HeadFirst设计模式的作者简介、面向对象的基本概念和原则等内容。

设计模式四人组(设计模式书籍作者)

  • Erich Gamma

    在这里插入图片描述

  • Richard Helm

    在这里插入图片描述

  • Ralph Johnson

    在这里插入图片描述

  • John Vlissides

    在这里插入图片描述

HeadFirst设计模式作者简介

  • Eric Freeman

    在这里插入图片描述在这里插入图片描述

  • Elisabeth Freeman
    在这里插入图片描述

  • Kathy Sierra
    在这里插入图片描述
    在这里插入图片描述

  • Bert Bates
    在这里插入图片描述

OO基本概念

  • 抽象

抽象是隐藏实现细节的过程,只向用户公开功能。

在面向对象编程中,抽象是通过定义类和接口来实现的。

用户只知道对象的功能,而不需要了解其内部实现细节‌

  • 封装

封装是将数据和代码封装到一个单元中的过程。

通过封装,可以限制对对象内部状态的直接访问,只能通过定义好的接口进行操作。

封装可以提高代码的安全性,并隐藏实现的细节‌

  • 继承

继承允许一个类(子类)继承另一个类(父类)的属性和方法。

通过继承,可以复用代码,减少重复,并实现代码的模块化。

子类可以扩展或修改父类的行为,实现代码的扩展性‌

  • 多态

多态是指允许不同类的对象对同一消息做出响应。

在面向对象编程中,多态通过接口和继承实现。

不同的对象可以对相同的函数调用做出不同的响应,增加了程序的灵活性和可扩展性‌

OO原则

  • 单一职责原则(Single Responsibility Principle, SRP)

一个类应该只负责一个单一的功能或职责。

通过将不同的职责分离到不同的类中,可以提高代码的可读性、可维护性和可扩展性,并降低系统的耦合性‌

  • 开闭原则(Open-Closed Principle, OCP)

软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。

这意味着软件实体应该通过扩展来满足新的需求,而不是修改已有的代码‌

  • ‌里氏替换原则(Liskov Substitution Principle, LSP)

子类必须能够替换其父类并且表现出相同的行为。

这意味着在程序中,使用子类的地方应该能够完全替换为父类,而不会影响程序的正确性‌

  • 依赖倒置原则(Dependency Inversion Principle, DIP)

高层模块不应该依赖于底层模块,两者都应该依赖于抽象。

抽象不应该依赖于具体实现,具体实现应该依赖于抽象‌

  • 接口隔离原则(Interface Segregation Principle, ISP)

一个类不应该依赖于它不需要的接口。

接口应该被拆分成更小的、更具体的接口,以满足不同类的需求‌

  • 合成复用原则(Composite Reuse Principle, CRP)

尽量使用对象组合而不是继承来实现代码复用。

对象组合可以让类之间的耦合度更低,更加灵活‌

  • 迪米特法则(Law of Demeter, LoD)

一个对象应该只与它直接依赖的对象进行交互,不应该了解其他对象的实现细节。

尽量减少对象之间的耦合度‌

  • 重用/释放等价原则(Acquire-Release Equivalence Principle, ARE)

在使用某个资源时,必须同时负责该资源的获取和释放。

如果一个对象负责获取某个资源,那么它也应该负责释放该资源‌

  • 单例模式原则(Singleton Pattern Principle)

确保一个类只有一个实例,并提供全局访问点。

单例模式可以避免不必要的对象创建,从而提高程序的性能‌

设计模式分类

在这里插入图片描述

专业术语

  • OO:Object-Oriented,面向对象
  • UML: Unified Modeling Language,统一建模语言

专业作图工具

  • ProcessOn
  • starUML

HeadFirst设计模式在线版电子书

HeadFirst设计模式在线版电子书

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

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

相关文章

UOS系统和windows系统wps文档显示差异问题解决

最近在使用UOS系统的过程中,发现了一个很有意思的现象。就是在UOS系统上编辑的文档,发到windows系统上,会出现两个文档显示差异很大的情况,文档都是使用一样的wps软件打开的。到底是什么原因导致这种现象的呢?该如何解…

网络应用层HTTP协议

网络应用层HTTP协议 1. HTTP协议介绍 在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如 HTML 文档)。…

B+树的原理及实现

文章目录 B树的原理及实现一、引言二、B树的特性1、结构特点2、节点类型3、阶数 三、B树的Java实现1、节点实现2、B树操作2.1、搜索2.2、插入2.3、删除2.4、遍历 3、B树的Java实现示例 四、总结 B树的原理及实现 一、引言 B树是一种基于B树的树形数据结构,它在数据…

在 macOS 中,设置自动将文件夹排在最前

文章目录 1、第一步访达设置2、第二步排序方式 需要两步设置 1、第一步访达设置 按名称排序的窗口中 2、第二步排序方式 选择名称

【数据库】Unity 使用 Sqlite 数据库

1.找到需要三个 DLL Mono.Data.Sqlite.dllSystem.Data.dllsqlite3.dll 上面两个dll可在本地unity安装目录找到: C:\Program Files\Unity\Hub\Editor\2022.3.xxf1c1\Editor\Data\MonoBleedingEdge\lib\mono\unityjit-win32 下面dll可在sqlite官网下载到&#xff…

国内使用博查SearchAPI进行智能搜索,通过API获取搜索引擎的天气、日历、百科、手机、火车票等信息

在现代开发中,网络资源搜索是关键且常见的需求。博查SearchAPI作为国内领先的智能搜索解决方案,已服务超过2000家企业和16000名开发者,获得腾讯元器、字节扣子、阿里钉钉等官方推荐。该API提供近百亿网页内容及多样的生态合作内容&#xff0c…

免费网站源码下载指南:如何安全获取并降低开发成本

许多开发者或是需要建立网站的人,可以方便地获取免费网站源码。这样的下载能帮助他们降低开发费用,迅速构建起基本框架。但在此过程中,仍有许多需要注意的事项。 许多开发者或是需要建立网站的人,可以方便地获取免费网站源码。这…

colnames看似简单,却能优化数据处理流程

引言 在数据处理和分析中,变量名称是至关重要的,它们决定了数据的可读性和操作的简便性。在R语言中,colnames 函数以其简单的语法设计,提供了高效管理数据框列名的能力,尤其是在复杂的爬虫任务中显得尤为重要。本篇文…

计算机网络例题

IP地址分类: A类:网络号范围: 1~126 (0000 0001 ~ 0111 1110) B类:网络号范围:128.1 ~ 191.255 (可用范围) C类:网络号段范围:192.0.1 ~ 223.2…

腾讯云AI代码助手编程挑战赛 - 使用 JavaScript 构建一个简易日历

功能简介: 动态年份选择:用户可以通过下拉框选择从 2000 年到 2050 年的任意年份。全年日历生成:根据用户选择的年份,动态生成该年份的所有 12 个月份的日历。直观的 UI 设计:使用 CSS 美化日历外观,使日历…

hive迁移后修复分区慢,怎么办?

我有1个30TB的分区表,客户给的带宽只有600MB,按照150%的耗时来算,大概要迁移17小时。 使用hive自带的修复分区命令(一般修复分区比迁移时间长一点),可能要花24小时。于是打算用前面黄大佬的牛B方案。 Hive增…

java-方法详解

目录​​​​​​​ 一、方法的定义 二、方法的调用 1.对于非静态方法: 2.对于静态方法: 3.类名.什么情况下可以省略 三、方法的参数传递 (1).实参和形参 形参 实参 (2).基本数据类型参数传递: (3).引用数据类型参数传递&#xff…

第二十八周机器学习笔记:PINN求正反解求PDE文献阅读——反问题、动手深度学习

第二十八周周报 一、文献阅读题目信息摘要Abstract网络架构实验——Data-driven discovery of partial differential equations(偏微分方程的数据驱动发现)1. Continuous time models(连续时间模型)例子:(Navier–Stok…

IT面试求职系列主题-Jenkins

想成功求职,必要的IT技能一样不能少,先说说Jenkins的必会知识吧。 1) 什么是Jenkins Jenkins 是一个用 Java 编写的开源持续集成工具。它跟踪版本控制系统,并在发生更改时启动和监视构建系统。 2)Maven、Ant和Jenkins有什么区别…

【我的 PWN 学习手札】IO_FILE 之 FSOP

FSOP:File Stream Oriented Programming 通过劫持 _IO_list_all 指向伪造的 _IO_FILE_plus,进而调用fake IO_FILE 结构体对象中被伪造的vtable指向的恶意函数。 目录 前言 一、glibc-exit函数浅析 二、FSOP 三、Largebin attack FSOP (…

ChatGPT入门之文本情绪识别:先了解LSTM如何处理文字序列

文章目录 0. 首先聊聊什么是RNN1. 理解LSTM,从数据如何喂给 LSTM开始2. LSTM每个门是如何处理序列数据的?2.1 遗忘门(Forget Gate):该忘掉哪些信息?2.2 输入门(Input Gate)&#xff…

springboot和vue配置https请求

项目场景: 代码发布到线上使用https请求需要配置ssl证书,前后端都需要修改。 问题描述 如图,我们在调用接口时报如下错误,这就是未配置ssl但是用https请求产生的问题。 解决方案: 前端:在vite.config.js文…

软件工程期末整理(二)

快速原型开发模型是(适用于客户需求难以清楚定义、规模较小的系统)。(编写系统实施计划)不是系统设计阶段的主要活动 解释:系统实施计划”更侧重于后续的实施与部署阶段,属于项目管理层面的内容 协作性不属于构件的特性在类图中…

filebeat、kafka

elk的架构 es数据库:非关系型数据库,json格式 logstash:收集日志 kibana:图形化的工具 ↓ 以上三种结合起来即为日志收集系统 filebeat 作用:filebeat是一款轻量级的日志收集工具,不依赖java环境&…

vue3使用vue3-video-play播放m3u8视频

1.安装vue3-video-play npm install vue3-video-play --save2.在组件中使用 import vue3-video-play/dist/style.css; import VideoPlay from vue3-video-play;// 视频配置项 const options reactive({src: https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8, //视频源mute…