【学习笔记】设计模式(Design Pattern)

本文作者分享了从初识设计模式到深入理解的心路历程,通过实际项目体会到设计模式在消除冗余if-else、提升代码可维护性和扩展性上的优势。介绍了设计模式的种类,如工厂、结构性和行为型模式,并强调了设计模式背后的可维护性、可复用性、可扩展性和灵活性等核心思想。同时,概述了六大设计原则,包括单一职责、开闭、里氏替换、依赖倒置、接口隔离和迪米特法则。最后,提供了学习资源和思维导图链接,鼓励读者实践并反馈意见。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0 分享一下我的学习经历

起初的我是为了好找工作,听同学的推荐开始学习设计模式,在B站跟着马士兵老师的视频一路学了下来,将每个demo都码了一遍(完全的模仿),也做了相应的笔记。当时的感觉就是神奇,除此之外也没有别的感觉了,在之后的日常中自己写的代码里最多也就使用一个单例模式(因为简单),完全没有理解设计模式的美妙之处,然后也就不了了之了。直到工作后第一次实战去重构前辈的代码发现了有很多if-else,于是就萌生了一个想法,能不能用设计模式把if-else消灭掉,在经过了很久努力之后终于利用工厂+策略消灭掉了if-else,这也是我第一次切身体会到了设计模式的美妙。随后我就将笔记逐渐转换为了思维导图(期间结合着菜鸟教程),这个过程我更多的是想复习一遍设计模式,从而可以很好的使用到我以后的工作中去。这一次的复习过程跟第一次的学习相比明显有了很大的不同,我在复习完每个模式之后都会思考一下demo中存在的一些问题,并且尝试着结合其他的设计模式去巧妙的解决。最后我想通过文章的形式和大家分享一下我的学习笔记和心得。如有不足,欢迎大家指出。

1 基本概念

设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。
设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。
这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

2 设计模式的种类

2.1 创造性

Factory Method(工厂方法)

Abstract Factory(抽象工厂)

Builder(构造器)

Prototype(原型模式/克隆模式)

Singleton(单例模式)

2.2 结构性

Adapter/Wrapper(包装器/转换器)

Bridge(桥接)

Composite(组合)

Decorator(装饰器)

Facade(门面/外观)

Flyweight(享元)

Proxy(代理)

2.3 行为型

Chain Of Responsibility(责任链)

Command(命令)

Interpreter(解释器)

Iterator(迭代器)

Mediator(调停者/中介者)

Memento(备忘录)

Observer(观察者)

State(状态模式)

Strategy(策略模式)

Template Method(模板方法)

Visitor(访问者)

3 思想

3.1 可维护性(Maintainability)

在修改功能时,需要改动的地方越少,可维护性就越好

3.2 可复用性(Reusability)

代码可以被以后重复使用,写出自己总结的类库

3.3 可扩展性(Extensibility/Scalability)

添加功能无需修改原来代码、少量修改

3.4 灵活性(Flexibility/Mobility/Adaptability)

代码接口可以灵活调用

4 六大设计原则

4.1 单一职责原则(SRP)

Single Resposibility Principle

一个类别太大、别太累,负责单一的职责

例如:Person、PersonManager

高内聚、低耦合

4.2 开闭原则(OCP)

Open-Closed Principle

对扩展开放,对修改关闭

尽量不修改原来代码的情况下进行扩展

抽象化和多态是开闭原则的关键

4.3 里氏替换原则(LSP)

Liscov Substitution Principle

所有使用父类的地方,必须能够透明的使用子类对象

4.4 依赖倒置原则(DIP)

Dependency Inversion Principle

依赖抽象、而不是依赖具体

面向抽象编程

面向接口编程

4.5 接口隔离原则(ISP)

Interface Segregation Principle

每一个接口应该承担独立的角色,不干不该自己干的事儿

避免子类实现不需要实现的方法

需要对客户提供接口的时候,只需要暴露最小的接口

4.6 迪米特法则(LOD)

Law Of Demeter

核心:尽量不要和陌生人说话

好处:和其他类的耦合度变低

对于一个对象来说,非陌生人包括以下5种:

  1. 对象本身this
  2. 以参数形式传入的对象
  3. 当前对象的成员对象
  4. 如果当前对象是一个集合,集合中的其他元素也都是朋友
  5. 当前对象所创建的对象

5 思维导图

在这里插入图片描述

6 Demo地址

https://github.com/ChenJiahao0205/design-pattern/tree/master

最后

我是通过马士兵老师的视频和菜鸟教程学习的设计模式,部分内容可能会有雷同,如有雷同,绝非巧合

想阅读更多设计模式相关文章,欢迎到我的专栏【学习笔记设计模式】中去查看

在23篇设计模式文章发布完之后,我会公开完整的思维导图,点关注,不迷路~

感谢大家看到这里,文章如有不足,欢迎大家指出;彦祖点个赞吧彦祖点个赞吧彦祖点个赞吧,欢迎大家关注和转发文章!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五条Programmer

比心~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值