23 种设计模式详解(3.7万字带你了解设计模式)文章连接
早期23种设计模式大白话讲解文章连接

创建型设计模式

单例设计模式

单例模式确保一个类只有一个实例,并提供一个全局访问点。这通常用于需要控制资源访问的情景。

工厂方法设计模式

工厂方法模式定义了一个创建对象的接口,但由子类决定实例化哪一个类。它适用于创建单一类型的产品,而具体的实现则由子类负责。

抽象工厂设计模式

抽象工厂模式不仅定义了创建对象的接口,还提供了创建一系列相关或相互依赖对象的能力,而不指定它们的具体类。它使得你可以轻松地为整个产品系列选择不同的实现方式。

建造者设计模式

建造者模式将复杂对象的构建与它的表示分离,允许相同的构建过程创建不同的表示。这种模式特别适合于当构建过程必须独立于最终产品的表示时使用。

原型设计模式

原型模式通过复制现有对象来创建新对象,而无需知道任何创建细节。这对于创建成本高昂或者复杂对象特别有用。

结构型设计模式

适配器设计模式

适配器模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。它就像一个转接头,帮助不同接口之间建立兼容性。

桥接设计模式

桥接模式将抽象部分与它的实现部分分离,使它们都可以独立变化。例如,在图形编辑器中,形状(如圆形、矩形)和填充方式(如实心、线条)可以独立扩展而不互相影响。

组合设计模式

组合模式让你能用一致的方式处理个体对象和对象集合。比如文件系统中的文件和文件夹,用户可以统一操作,无论是一个文件还是多个文件的集合。

装饰器设计模式

装饰器模式在不改变原对象的情况下,动态地给对象添加职责。它更强调的是组合而非继承,通过包装已有对象来动态添加功能。例如,Java IO流库就是利用装饰器模式实现的。

外观设计模式

外观模式为子系统中的一组接口提供一个一致的界面,简化了高层模块对子系统的使用。

享元设计模式

享元模式通过共享尽可能多的对象来节省内存空间。在Java中,String池就是享元模式的一个例子。

代理设计模式

代理模式为其他对象提供一种代理以控制对这个对象的访问。它可以用来添加额外的行为,如延迟加载、权限检查等。

行为型设计模式

访问者设计模式

访问者模式允许你定义一个新的操作,而不改变这些类的接口。它将算法从对象结构中分离出来。

模板方法设计模式

模板方法模式定义了一个操作中的算法框架,而将一些步骤延迟到子类中。它属于行为型设计模式,关注的是算法的结构,而不是像抽象工厂那样专注于对象的创建。

策略设计模式

策略模式让你定义一系列算法,把它们一个个封装起来,并且使它们可以互换。客户端可以根据需要选择算法。

状态设计模式

状态模式允许一个对象在其内部状态改变时改变它的行为。它将所有与特定状态相关的逻辑放在一个类中,避免了大量的条件判断语句(if-else),从而让代码更加清晰易读。

观察者设计模式

观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会收到通知并自动更新。这不仅可以是简单的通知机制,也可以包括复杂的订阅-发布系统。

备忘录设计模式

备忘录模式用于保存一个对象的内部状态,以便以后恢复它。它经常与命令模式一起使用,以实现撤销功能。

中介者设计模式

中介者模式通过引入一个中介对象来封装一系列对象之间的交互。减少了对象间的直接耦合,使得系统更易于维护和扩展。

迭代器设计模式

迭代器模式提供了一种顺序访问一个聚合对象中各个元素的方法,而不暴露其内部表示。

命令设计模式

命令模式将请求封装成对象,从而使你可以用不同的请求对客户进行参数化;队列或者日志请求,以及支持可撤销的操作。它是实现回调的一种替代方案。

责任链设计模式

责任链模式让你能够将请求沿着处理者链条传递。接收者和发送者都没有对方的引用,从而降低了耦合度。每个处理者都有机会处理请求,直到有一个处理者成功处理为止,这比简单的 if-else 更加灵活。

解释器设计模式

解释器模式为语言定义了一个表达式语法,然后实现了该语法的解释器。虽然在通用编程中较少见,但它非常适合特定领域语言(DSL)或解析表达式的场景。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐