23种设计模式
1.设计模式概述
- 概念:
设计模式是前辈对代码开发经验的总结,是结局特定问题的一系列套路。
它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全的解决方案。
- 意义:
设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。
- 优点:
① 可以提高程序员的思维能力、编程能力和设计能力。
② 使程序设计更加标准化、代码编制更加工程化、使软件开发效率大大提高,从而缩短软件的开发周期。
③ 使设计的代码可重复性高、可读性强、可靠性高、灵活性好、可维护性强。
- 要素:
模式名称
问题
解决方案
效果
- GoF23包括:
一种思维、一种态度、一种进步
创建模式:
单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式
结构型模式:
适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
行为型模式:
模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
2.OOP七大原则
开闭原则:对扩展开放,对修改关闭
里氏替换原则:集成必须确保超类所拥有的性质在子类中仍然成立。
依赖倒置原则:要面向接口编程,不要面向实现编程。
单一职责原则:控制类的粒度大小,将对象解耦、提高其内聚性。(原子性)
接口隔离原则:要为各个类建立它们需要的专用接口
迪米特法则:只与你的直接朋友交谈,不跟"陌生人"说话。(降低耦合度)
合成复用原则:尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
3.单立模式
- 核心作用:
保证一个类只有一个实例,并且提供一个访问该实例的全局访问点
- 常见场景:
Windows的任务管理器
Windows的回收站
项目中,读取配置文件的类,一般也只有一个对象,没必要每次都去new对象读取
网站的计数器一般也会采用单例模式,可以保证同步。
数据库连接池的设计一般也是单例模式。
在Servlet编程中,每个Servlet也是单例的。
在Spring中,每个Bean默认就是单例的。
饿汉式单例:初始化就创建
懒汉式单例:使用的适合在创建,在并发的时候是不好用的。
双重监测锁模式的懒汉式单例( DCL):指令重排
4.工厂模式
- 作用:
实现了创建者和调用者的分离
- 详细分类:
简单工厂模式
工厂方法模式
抽象工厂模式
- 工厂模式满足 OOP 七大原则中的:
开闭原则:一个软件的实体应当对扩展开放,对修改关闭
依赖倒转原则:要针对接口编程,不要针对实现编程
迪米特法则:只与你直接的朋友通信,而避免和陌生人通信
- 核心本质:
实例化对象不使用new,用工厂方法代替
将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦
- 三种模式:
① 简单工厂模式(静态工厂模式):
用来生产同一等级结构中的任意产品(对于增加新的产品,需要覆盖已有代码)
弊端:增加一个新的产品,如果你不修改代码,做不到!
② 工厂方法模式:
用来生产同一等级结构中的固定产品(支持增加任意产品)
③ 抽象工厂模式:
围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂
5.抽象工厂模式
- 定义:
抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类
- 适用场景:
客户端(应用层)不依赖于产品类实现如何被创建、实现等细节
强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复代码
提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现
- 优点:
具体产品在应用层的代码隔离,无需关心创建的细节
将一个系列的产品统一到一起创建
- 缺点:
规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难
增加了系列的抽象性和理解难度
6.建造者模式
建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式
- 定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
- 主要作用:
在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。
用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)
- 应用案例:
工厂(建造者模式):负责制造汽车(组装过程和细节在工厂内)
汽车购买者(用户):你只需要说出你需要的型号,然后直接购买就可以使用了。(不需要知道汽车是怎样组装的)
7.原型模式
克隆
Prototype
Cloneable接口
clone()方法
8.适配器模式
将一个类的接口转换称客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作!
- 角色分析:
目标接口:客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口
需要适配的类:需要适配的类或适配者类。
适配器:通过包装一个需要适配的对象,把原接口转换称目标对象!
- 对象适配器优点:
①一个对象适配器可以把多个不同的适配者适配到同一个目标
②可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据“里氏替换原则”,适配者的子类也可通过该适配器进行适配。
- 类适配器的缺点:
①对于Java、C#等不支持多重类继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者。
②在Java、C#等语言中,类适配器模式中的目标抽象类只能为接口,不能为类,其使用有一定的局限性。
- 使用场景:
①系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需要,甚至没有这些类的源代码。
②想创建一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
9.桥接模式
桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体模式或接口模式。
- 优点:
桥接模式偶尔类似于多继承方案,但是多继承方案违背了类的单一职责原则,复用性比较差,类的个数也非常多,桥接模式是比多继承方案更好的解决方法。极大的减少了子类的个数,从而降低管理和维护的成本。
桥接模式提高了系统的可扩充性,在两个变化纬度中任意扩展一个维度,都不需要修改原有系统。符合开闭原则,就像一座桥,可以把两个变化的纬度连接起来!
- 缺点:
增加系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
要求正确识别出系统中两个独立变化的难度,因此其使用范围具有一定的局限性。
- 案例:
Java语言通过Java虚拟机实现了平台的无关性
AWT中的Peer架构
JDBC驱动程序也是桥接模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!