【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,统一建模语言

专业作图工具

HeadFirst设计模式在线版电子书

HeadFirst设计模式在线版电子书

相关推荐
invicinble2 小时前
这里对java的知识体系做一个全域的介绍
java·开发语言·python
wbs_scy2 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·开发语言
ss2732 小时前
食谱推荐系统功能测试如何写?
java·数据库·spring boot·功能测试
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
try2find3 小时前
打印ascii码报错问题
java·linux·前端
014-code3 小时前
CompletableFuture 实战模板(超时、组合、异常链处理)
java·数据库
Nicander3 小时前
多数据源下@transcation事务踩坑
java·后端
それども4 小时前
DELETE 和 TRUNCATE TABLE区别
java·数据库·mysql
sjsjsbbsbsn4 小时前
大模型核心知识总结
java·人工智能·后端
白晨并不是很能熬夜5 小时前
【PRC】第 2 篇:Netty 通信层 — NIO 模型 + 自定义协议 + 心跳
java·开发语言·后端·面试·rpc·php·nio