常见设计模式及其目的、用途

创建型模式

  1. 单例模式(Singleton Pattern)

    • 目的:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
    • 用途:适用于需要对资源进行集中管理和控制访问的场景,如配置管理器、日志记录器等。
    • 优化可读性:通过私有构造函数和静态实例,明确地表达了只有一个实例的意图,避免了重复创建对象的混乱。
  2. 工厂方法模式(Factory Method Pattern)

    • 目的:定义一个创建产品对象的接口,但将具体实现延迟到子类。
    • 用途:当创建对象的逻辑复杂或有多种产品变体时使用,如创建不同类型的数据库连接。
    • 优化可读性:将对象创建逻辑封装在工厂类中,使客户端代码无需关心创建细节,代码更简洁。
  3. 抽象工厂模式(Abstract Factory Pattern)

    • 目的:提供一个创建一系列相关或依赖对象的接口,而无需指定它们具体的类。
    • 用途:适用于产品家族的创建场景,如创建不同风格的UI组件。
    • 优化可读性:通过统一的工厂接口,让客户端代码可以一致地创建多个相关对象,减少条件判断。
  4. 建造者模式(Builder Pattern)

    • 目的:将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。
    • 用途:用于创建复杂对象,如构建一个包含多个属性的报表。
    • 优化可读性:通过分步骤构建对象,使代码逻辑更清晰,易于理解和维护。
  5. 原型模式(Prototype Pattern)

    • 目的:用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象。
    • 用途:适用于对象创建成本较高或需要频繁创建相似对象的场景,如复制文档对象。
    • 优化可读性:通过复制原型对象,避免了复杂的初始化和配置代码,使代码更简洁。

结构型模式

  1. 适配器模式(Adapter Pattern)

    • 目的:将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而不能一起工作的类可以协同工作。
    • 用途:用于系统集成或使用第三方库时,如将老接口适配到新系统中。
    • 优化可读性:通过适配器类将不同接口进行转换,使代码的交互更加清晰,减少了直接修改原有代码的混乱。
  2. 桥接模式(Bridge Pattern)

    • 目的:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
    • 用途:适用于实现与抽象需要独立变化的场景,如图形编辑器中的形状和填充颜色。
    • 优化可读性:将抽象与实现解耦,使代码更灵活,减少了类的继承层次,代码结构更清晰。
  3. 组合模式(Composite Pattern)

    • 目的:将对象组合成树形结构以表示“部分-整体”的层次结构,使用户可以像处理单个对象一样处理对象组合。
    • 用途:适用于文件系统、图形界面等具有层次结构的场景。
    • 优化可读性:通过统一的接口处理单个对象和组合对象,使代码更具一致性,减少了重复代码。
  4. 装饰者模式(Decorator Pattern)

    • 目的:动态地给对象添加一些额外的职责,而不改变原有对象的结构。
    • 用途:适用于需要动态添加功能的场景,如装饰图形、添加网络滤波器等。
    • 优化可读性:通过装饰类动态添加功能,避免了子类继承带来的复杂性,使代码更灵活易读。
  5. 外观模式(Facade Pattern)

    • 目的:为子系统中的一组接口提供一个一致的界面,简化客户端对子系统的使用。
    • 用途:适用于需要简化复杂子系统调用的场景,如客户端与多个服务器交互。
    • 优化可读性:通过外观类封装复杂逻辑,提供简单的接口,使客户端代码更简洁,易于理解。
  6. 享元模式(Flyweight Pattern)

    • 目的:运用共享技术有效地支持大量细粒度的对象。
    • 用途:适用于内存占用较大的场景,如文本编辑器中的字符对象。
    • 优化可读性:通过共享对象,减少了内存占用,代码中对象的创建和管理更清晰。
  7. 代理模式(Proxy Pattern)

    • 目的:为其他对象提供一种代理以控制对这个对象的访问。
    • 用途:适用于需要控制对象访问、延迟加载或分布式访问的场景。
    • 优化可读性:通过代理类控制访问,使客户端代码无需关心对象的创建和访问细节,代码更简洁。

行为型模式

  1. 模板方法模式(Template Method Pattern)

    • 目的:定义一个操作中的算法骨架,将一些步骤延迟到子类。
    • 用途:适用于算法的整体步骤固定,但某些步骤需要子类实现的场景,如排序算法。
    • 优化可读性:通过模板方法定义算法骨架,使子类只需关注特定步骤,代码结构更清晰。
  2. 命令模式(Command Pattern)

    • 目的:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。
    • 用途:适用于需要记录操作历史、支持撤销/重做或异步执行的场景。
    • 优化可读性:通过命令对象封装操作,使代码更具可读性和可维护性,客户端代码更简洁。
  3. 迭代器模式(Iterator Pattern)

    • 目的:提供一种顺序访问聚合对象元素的方法,且不暴露其内部的表示。
    • 用途:适用于需要遍历集合的场景,如遍历列表、树等数据结构。
    • 优化可读性:通过迭代器封装遍历逻辑,使客户端代码更简洁,专注于业务逻辑。
  4. 观察者模式(Observer Pattern)

    • 目的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
    • 用途:适用于事件驱动的场景,如用户界面更新、股票价格通知等。
    • 优化可读性:通过观察者和被观察者解耦,使代码更具可读性和可维护性,减少了直接调用的耦合。
  5. 中介者模式(Mediator Pattern)

    • 目的:用一个中介对象来封装一系列对象之间的交互,使各对象不需要显式地相互引用。
    • 用途:适用于对象之间交互复杂的场景,如聊天室、控制面板等。
    • 优化可读性:通过中介者封装交互逻辑,减少了对象之间的直接引用,代码结构更清晰。
  6. 状态模式(State Pattern)

    • 目的:允许对象在内部状态改变时改变它的行为,看起来好像改变了它的类。
    • 用途:适用于对象状态频繁变化的场景,如游戏中的角色状态、订单状态等。
    • 优化可读性:通过状态对象封装不同状态的行为,使代码更清晰,状态转换更直观。
  7. 策略模式(Strategy Pattern)

    • 目的:定义一系列算法,把它们封装成独立的类,并使它们可以互相替换。
    • 用途:适用于算法需要动态切换的场景,如不同的排序算法、支付策略等。
    • 优化可读性:通过策略类封装算法,使客户端代码可以灵活切换算法,代码更具可读性和可维护性。
  8. 责任链模式(Chain of Responsibility Pattern)

    • 目的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
    • 用途:适用于审批流程、拦截器链等场景。
    • 优化可读性:通过责任链封装处理逻辑,客户端代码无需关心具体处理者,代码结构更清晰。
  9. 备忘录模式(Memento Pattern)

    • 目的:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
    • 用途:适用于需要保存和恢复对象状态的场景,如游戏存档、编辑器撤销操作等。
    • 优化可读性:通过备忘录对象封装状态,使保存和恢复操作更清晰,代码更具可读性。
  10. 访问者模式(Visitor Pattern)

    • 目的:表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素类的前提下定义作用于这些元素的新操作。
    • 用途:适用于需要对对象结构中的元素进行多种不同的操作的场景,如代码分析工具。
    • 优化可读性:通过访问者封装操作,使代码更具可读性和可维护性,客户端代码更简洁。
  11. 解释器模式(Interpreter Pattern)

    • 目的:给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
    • 用途:适用于需要解释特定语言或表达式的场景,如简单的算术表达式解释。
    • 优化可读性:通过文法和解释器封装语言逻辑,使代码更具可读性和可维护性。
  12. 空对象模式(Null Object Pattern)

    • 目的:提供一个空的实现对象,用于代替 null 值,以避免空指针异常。
    • 用途:适用于需要处理空值的场景,如查询结果为空时。
    • 优化可读性:通过空对象封装空值处理逻辑,使客户端代码无需进行空值检查,代码更简洁易读。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 学习并理解 23 种设计模式 设计模式 Design Pattern 是一套被反复使用、多数人知晓的、经过分类编目...
    Code_Narrator阅读 4,721评论 0 1
  • 学习并理解 23 种设计模式 设计模式 Design Pattern 是一套被反复使用、多数人知晓的、经过分类编目...
    Code_Narrator阅读 3,978评论 0 0
  • 前言 本开发规范基于《阿里巴巴Java开发手册终极版》修改,并集成我们自己的项目开发规范,整合而成。 为表示对阿里...
    4ea0af17fd67阅读 10,943评论 0 5
  • 设计模式是一种被广泛应用于软件工程的解决问题的方法。 它们可以帮助开发人员提高代码的可复用性、可维护性和可扩展性。...
    WilliamChou_阅读 3,456评论 0 2
  • 1. 原型模式 1.1 概述 原型模式是一种创建型设计模式,通过复制已有的实例来创建新对象,而不是通过实例化类来创...
    cxyexe阅读 741评论 0 0