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

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.mzph.cn/news/891829.shtml

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

相关文章

Oracle数据库如何找到 Top Hard Parsing SQL 语句?

有一个数据库应用程序存在过多的解析问题,因此需要找到产生大量硬解析的主要语句。 什么是硬解析 Oracle数据库中的硬解析(Hard Parse)是指在执行SQL语句时,数据库需要重新解析该SQL语句,并创建新的执行计划的过程。这…

【GBT32960协议学习系列】GBT 32960协议的背景、目的和适用范围

GBT 32960协议的背景、目的和适用范围 1. GBT 32960协议的背景 GBT 32960是中国国家标准,全称为《电动汽车远程服务与管理系统技术规范》。该标准由中国国家标准化管理委员会发布,旨在规范电动汽车远程服务与管理系统的技术要求,确保电动汽车…

蓝桥杯备赛:C++基础,顺序表和vector(STL)

目录 一.C基础 1.第一个C程序: 2.头文件: 3.cin和cout初识: 4.命名空间: 二.顺序表和vector(STL) 1.顺序表的基本操作: 2.封装静态顺序表: 3.动态顺序表--vector:…

创建并配置华为云虚拟私有云

目录 私有云 创建虚拟私有云 私有云 私有云是一种云计算模式,它将云服务部署在企业或组织内部的私有基础设施上,仅供该企业或组织内部使用,不对外提供服务.私有云的主要特点包括: 私密性:私有云的资源(如…

OWASP ZAP之API 请求基础知识

ZAP API 提供对 ZAP 大部分核心功能的访问,例如主动扫描器和蜘蛛。ZAP API 在守护进程模式和桌面模式下默认启用。如果您使用 ZAP 桌面,则可以通过访问以下屏幕来配置 API: Tools -> Options -> API。 ZAP 需要 API 密钥才能通过 REST API 执行特定操作。必须在所有 …

音视频入门基础:MPEG2-PS专题(3)——MPEG2-PS格式简介

一、引言 本文对MPEG2-PS格式进行简介。 进行简介之前,请各位先下载MPEG2-PS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-PS的官方文档。但是ITU提供的文档是免费的,ISO/IEC是付费的,所以我们主要阅读ITU提供的官方文档,比如较新…

CPT203 Software Engineering 软件工程 Pt.3 系统建模(中英双语)

文章目录 5. System Modeling(系统建模)5.1 Context models(上下文模型)5.2 Interaction models(交互模型)5.2.1 Use case modeling(用况建模)5.2.2 Sequence diagram(顺…

什么是Kafka的重平衡机制?

Kafka 的重平衛机制是指在消费者组中新增或删除消费者时,Kafka 集群会重新分配主题分区给各个消费者,以保证每个消费者消费的分区数量尽可能均衡。 重平衡机制的目的是实现消费者的负载均衡和高可用性,以确保每个消费者都能够按照预期的方式…

Nginx——反向代理(三/五)

目录 1.Nginx 反向代理1.1.Nginx 反向代理概述1.2.Nginx 反向代理的配置语法1.2.1.proxy_pass1.2.2.proxy_set_header1.2.3.proxy_redirect 1.3.Nginx 反向代理实战1.4.Nginx 的安全控制1.4.1.如何使用 SSL 对流量进行加密1.4.2.Nginx 添加 SSL 的支持1.4.3.Nginx 的 SSL 相关指…

VBA(Visual Basic for Applications)编程|excel|一系列网址或文件路径快速转换为可点击的超链接

很多时候,我们需要把导入的数据某一列转换成超链接,比如URL形式的列。 那么,大批量的情况下,无疑一个个手动点击是非常愚蠢的办法,这个时候我们就需要VBA编程来编写宏,通过编写宏来简化这些手动操作并不现…

【C++】图像模糊处理题目详解与实现

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述题目内容输入格式输出格式示例输入:输出: 💯题目分析问题拆解 💯我的做法代码实现代码分析 💯老师的做法…

在 Ubuntu 22.04 上部署 AppArmor 应用安全教程

在这篇教程中,我们将为你设置 AppArmor 以增强应用程序的安全性。 AppArmor 是一个 Linux 安全模块,允许你限制各个程序的功能。通过强制执行强制访问控制策略,AppArmor 增强了你的应用程序和系统的安全性。 AppArmor 是一个易于使用的 Lin…

Nginx:动静分离

什么是动静分离? 动静分离 是指将网站中的静态资源(如图片、样式表、脚本等)和动态内容(如 PHP、Python、Node.js 等后端生成的内容)分开部署和处理。这样做的好处是可以利用不同的服务器或缓存策略来优化不同类型的资源。 动静分离的好处 提高性能:静态资源可以直接从…

每天40分玩转Django:Django插件开发

Django插件开发 一、插件开发概述表 阶段主要任务技术要点难度准备工作项目结构设计、环境配置项目布局、setup.py★★★☆☆开发实现功能开发、测试编写Django AppConfig、Signals★★★★☆文档编写API文档、使用说明Markdown、reStructuredText★★★☆☆发布部署PyPI打包…

什么是TDD测试驱动开发(Test Driven Development)?

什么是测试驱动开发? 软件开发团队通常会编写自动化测试套件来防止回归。这些测试通常是在编写应用程序功能代码之后编写的。我们将采用另一种方法:在实现应用程序代码之前编写测试。这称为测试驱动开发 (TDD)。 为什么要应用 TDD?通过在实…

后台管理系统用户退出登录方案实现

退出登录一直是一个通用的前端实现方案,对于退出登录而言,它的触发时机一般有两种: 1. 用户主动退出,即用户点击登录按钮之后退出; 2. 用户被动退出,Token过期或被 其他人"顶下来" 时退出&…

文献分享:BGE-M3——打通三种方式的嵌入模型

文章目录 1. \textbf{1. } 1. 背景与导论 1.1. \textbf{1.1. } 1.1. 研究背景 1.2. \textbf{1.2. } 1.2. 本文的研究 1.3. \textbf{1.3. } 1.3. 有关工作 2. M3-Embedding \textbf{2. M3-Embedding} 2. M3-Embedding 2.1. \textbf{2.1. } 2.1. 模型核心: 混合检索方式 2.1.1. \…

Hadoop•FinalShell连接VMware免密登录

听说这是目录哦 FinalShell连接VMware🌤️解决重连失效FinalShell的使用 免密登录⛈️能量站😚 FinalShell连接VMware🌤️ 保持虚拟机的开机状态,打开FinalShell,如果虚拟机关机或者挂起,连接就会断开。 …

一个在ios当中采用ObjectC和opencv来显示图片的实例

前言 在ios中采用ObjectC编程利用opencv来显示一张图片,并简单绘图。听上去似乎不难,但是实际操作下来,却不是非常的容易的。本文较为详细的描述了这个过程,供后续参考。 一、创建ios工程 1.1、选择ios工程类型 1.2、选择接口模…

《Rust权威指南》学习笔记(五)

高级特性 1.在Rust中,unsafe是一种允许绕过Rust的安全性保证的机制,用于执行一些Rust默认情况下不允许的操作。unsafe存在的原因是:unsafe 允许执行某些可能被 Rust 的安全性检查阻止的操作,从而可以进行性能优化,如手…