【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设计模式在线版电子书

相关推荐
快乐非自愿4 小时前
一文解秘Rust如何与Java互操作
java·开发语言·rust
小万编程4 小时前
基于SpringBoot+Vue毕业设计选题管理系统(高质量源码,提供文档,免费部署到本地)
java·vue.js·spring boot·计算机毕业设计·java毕业设计·web毕业设计
m0_748235074 小时前
使用rustDesk搭建私有远程桌面
java
快乐是5 小时前
发票打印更方便
java
文浩(楠搏万)5 小时前
Java内存管理:不可达对象分析与内存泄漏优化技巧 Eclipse Memory Analyzer
java·开发语言·缓存·eclipse·内存泄漏·不可达对象·对象分析
圆蛤镇程序猿5 小时前
【什么是MVCC?】
java·数据库·oracle
m0_748256785 小时前
【SQL】掌握SQL查询技巧:数据分组与排序
java·jvm·sql
Damon撇嘴笑5 小时前
Cause: java.sql.SQLException: sql injection violation, comment not allow异常问题处理
java·数据库·sql
孟秋与你5 小时前
【redisson】redisson分布式锁原理分析
java·分布式
m0_748237055 小时前
【随时随地学算法】本地部署hello-algo结合内网穿透远程学习新体验
java