设计模式是软件开发中用于解决常见问题的模板或蓝图。它们被分为三大类,共23种,每种模式都有其特定的用途和适用场景。
创建型模式(5种)
这些模式处理对象的创建和管理,确保对象实例的创建过程高效且符合预期。
单例模式:
确保一个类只有一个实例,并提供一个全局访问点。适用于需要唯一对象实例的场景,如配置管理、日志记录器和线程池。
工厂方法模式:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。适用于当需要将对象创建过程延迟到子类时。
抽象工厂模式:
提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。适用于系统需要独立于其产品的创建、组合和表示时。
建造者模式:
将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。适用于需要独立于对象组成部分和装配方式的场景。
原型模式:
通过复制一个已经存在的对象来创建新的对象。适用于需要避免创建类层次结构或当实例化对象成本较高时。
结构型模式(7种)
这些模式关注类和对象的组合与继承,以构建更大的结构。
适配器模式:
允许不兼容的接口一起工作。适用于需要将一个类的接口转换为另一个类所期望的接口时。
装饰者模式:
在对象的现有方法中动态添加/覆盖行为。适用于需要在不修改现有类的情况下增加功能时。
代理模式:
为另一个对象提供一个占位符,以控制对这个对象的访问。适用于需要远程对象或延迟加载对象时。
外观模式:
为子系统中的一组接口提供一个一致的高层接口。适用于需要简化子系统接口并为其用户提供一个统一界面时。
桥接模式:
将对象的抽象与其实现分离,使它们可以独立变化。适用于需要将变化的部分隔离时。
组合模式:
将对象组合成树形结构以表示“整体-部分”的层次结构。适用于需要表示对象部分的层次关系时。
享元模式:
通过共享技术有效地复用细粒度对象。适用于需要大量细粒度对象且这些对象具有大量相似状态时。
行为型模式(11种)
这些模式描述对象间的通信和责任分配机制。
策略模式:
定义一系列算法,封装每一个,并使它们可以相互替换。适用于需要在运行时选择算法的行为时。
观察者模式:
定义对象之间的一对多依赖关系,当一个对象改变状态时,所有依赖者都会被通知并自动更新。适用于需要实现对象间松耦合时。
迭代器模式:
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露其内部的表示。适用于需要遍历聚合对象时。
命令模式:
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。适用于需要将请求的发送者和接收者解耦时。
备忘录模式:
捕获一个对象的内部状态,并在该对象之外保存这个状态。适用于需要支持撤销/重做操作时。
中介者模式:
定义一个对象来封装一组对象之间的交互。适用于需要减少类之间的直接依赖时。
解释器模式:
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。适用于需要实现一个简单的解释器时。
责任链模式:
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。适用于需要动态地确定请求的处理者时。
状态模式:
允许对象在其内部状态改变时改变其行为。适用于需要根据对象状态来改变其行为时。
模板方法模式:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。适用于需要在不改变算法结构的情况下重新定义某些步骤时。
访问者模式:
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。适用于需要对一个对象结构中的元素进行操作时,而又不希望改变这些元素的类时。
设计模式的使用可以提高代码的可维护性、可扩展性和可重用性。在实际开发中,应根据具体需求和场景选择合适的设计模式。