设计模式-行为型 学习笔记

行为型

责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许你构建一系列对象,每个对象都可以处理请求,并将请求传递给下一个对象。这些对象被组织成链,因此请求沿着链传递,直到有一个对象处理它为止。责任链模式的主要思想是将请求的发送者和接收者解耦,从而提高系统的灵活性和可维护性。

责任链模式通常包括以下主要元素:

  1. 处理器(Handler):处理器是抽象类或接口,它定义了处理请求的接口方法。处理器通常包含一个指向下一个处理器的引用(后继者)。
  2. 具体处理器(Concrete Handler):具体处理器是实现了处理器接口的具体类,负责处理请求。如果它能够处理请求,它会执行相应的操作,否则会将请求传递给下一个处理器。
  3. 客户端(Client):客户端负责创建处理器链,并将请求发送到链的起始点。客户端通常不需要知道链中的具体处理器是谁,只需将请求发送到链的第一个处理器。

责任链模式的优点包括:

  • 降低了发送者和接收者之间的耦合度,使系统更加灵活。
  • 允许动态地组织和扩展处理器链,无需修改现有代码。
  • 可以避免请求的发送者知道链中处理请求的具体处理器,提高了系统的可维护性。

责任链模式的缺点包括:

  • 如果链过长或处理器的顺序不当,可能会导致性能问题。
  • 请求可能在链中传递到链的末尾,而没有任何处理器能够处理它,这需要额外的逻辑来处理这种情况。

责任链模式常用于以下情况:

  • 当系统中有多个对象可以处理请求,但客户端不知道应该由哪个对象来处理时。
  • 当需要按顺序执行一系列处理操作,直到其中一个操作成功为止。
  • 当需要动态地组织和扩展处理器链。

责任链模式在日常开发中常用于日志记录、权限验证、异常处理、过滤器等领域,其中请求可以沿着链依次传递并处理。

命令模式

它旨在将请求封装为一个对象,从而使你能够参数化客户端对象,并以不同的请求进行参数化。这允许你将请求的发送者和接收者解耦,并支持撤销操作、队列操作和日志记录。

命令模式通常用于需要将请求封装成对象以支持撤销、日志记录、事务等功能的场景。常见的应用包括遥控器控制系统、文本编辑器的撤销操作、任务队列管理等。

迭代器模式

迭代器模式通常用于需要遍历集合元素的情况,例如遍历列表、树、图等数据结构,或者在开发中需要实现自定义集合类,为其提供一种迭代方法。它是设计模式中的一种基本模式,在许多编程语言和库中都有内置的迭代器支持。

中介者模式

中介者模式通常用于大型系统中,特别是当系统中对象之间的交互复杂并且需要协调时。常见的应用包括聊天程序、飞机交通管制系统、图形用户界面框架等,这些系统中对象之间的协调和通信是非常重要的。中介者模式有助于减少系统复杂性,并提高系统的可维护性。

备忘录模式

它用于捕获一个对象的内部状态,并在不破坏对象封装的前提下将其保存,以便将来可以恢复对象到先前的状态。备忘录模式允许你实现撤销和恢复功能,以及保存对象的历史状态。

备忘录模式的主要优点包括:

  • 允许在不暴露对象的内部结构的情况下捕获和恢复其状态。
  • 支持撤销和恢复功能,因为可以在不同时间点创建备忘录,并在需要时进行恢复。
  • 有助于维护对象的历史状态,用于审计、版本控制等应用。

备忘录模式通常在需要实现撤销、恢复、历史记录和快照等功能时使用。常见的应用包括文本编辑器的撤销功能、游戏的进度保存和恢复、数据库事务的回滚等。备忘录模式允许将对象状态的管理与对象的核心功能分离,提高了系统的可维护性和灵活性。

观察者模式

观察者模式(Observer Pattern)是一种行为设计模式,它用于定义对象之间的一对多依赖关系,以便当一个对象的状态发生变化时,其所有依赖对象都能够自动收到通知并更新。观察者模式也被称为发布-订阅模式。

观察者模式包括以下主要元素:

  1. 主题(Subject):主题是被观察的对象,它包含一个状态,并维护一组观察者对象。主题提供注册、删除和通知观察者的方法。
  2. 观察者(Observer):观察者是依赖主题的对象,它包含一个更新方法,用于接收主题状态的变化通知。当主题状态变化时,观察者的更新方法被调用,以便它可以执行相应的操作。
  3. 具体主题(Concrete Subject):具体主题是主题接口的实现,它负责维护状态并通知观察者。具体主题通常包括一个集合来存储注册的观察者。
  4. 具体观察者(Concrete Observer):具体观察者是观察者接口的实现,它注册到具体主题,以便接收状态变化的通知。具体观察者的更新方法会被调用以响应主题的变化。

观察者模式的主要优点包括:

  • 降低了主题和观察者之间的耦合度,使系统更加灵活和可维护。
  • 支持一对多的通信,允许多个观察者同时监听同一个主题。
  • 可以轻松地添加或删除观察者,以扩展系统。

观察者模式通常用于以下情况:

  • 当一个对象的状态变化需要通知其他对象,并且你不希望这些对象紧密耦合时。
  • 当需要建立一种分布式事件处理系统,其中多个组件需要相互协作。

常见的示例包括图形用户界面(GUI)事件处理、订阅-发布系统、股票市场报价系统等,这些场景都可以使用观察者模式来实现对象之间的通信和协作。

状态模式

用于将对象的行为和状态分离,并使对象在不同状态下具有不同的行为。状态模式允许对象在其内部状态发生变化时,改变其行为,而不需要修改其类。状态模式的核心思想是将对象的状态转换和处理封装到不同的状态类中,以确保对象的状态和行为可以动态改变,同时保持了对象的封装性和可维护性。

策略模式

策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,将每个算法封装到独立的对象中,使它们可以互相替换。策略模式允许客户端在运行时选择算法,而不需要修改其代码。这使得客户端可以更灵活地选择适合其需求的算法。

策略模式包括以下主要元素:

  1. 策略接口(Strategy Interface):策略接口定义了一组算法相关的操作,通常包括一个或多个方法。具体的策略类将实现这个接口,每个具体策略类代表一个不同的算法。
  2. 具体策略(Concrete Strategy):具体策略是策略接口的实现,它包含了一个特定的算法。不同的具体策略类实现不同的算法,允许客户端在运行时选择合适的策略。
  3. 上下文(Context):上下文是客户端与策略对象交互的类。它包含一个策略对象的引用,并通常具有一个方法来设置或切换当前的策略。

策略模式的核心思想是将算法的选择与实际操作分离,从而允许客户端根据需要动态选择算法,而不必改变其代码。这提供了更大的灵活性和可扩展性。

模板方法模式

模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个算法的骨架,将算法中的某些步骤延迟到子类中实现。模板方法模式允许子类在不改变算法结构的情况下重定义算法中的某些步骤。

模板方法模式包括以下主要元素:

  1. 模板(Template):模板是定义算法骨架的抽象类。它包含一个模板方法,该方法定义了算法的结构,并将算法的各个步骤作为抽象方法或可重写的方法。模板方法通常包括一系列步骤,其中的某些步骤会被延迟到具体子类来实现。
  2. 具体模板(Concrete Template):具体模板是模板类的具体实现,它实现了抽象方法或可重写的方法,并提供了算法中缺失的具体步骤的实现。

模板方法模式的核心思想是将算法的骨架封装在抽象模板中,同时允许具体子类提供特定步骤的实现。这种方式允许在不改变算法结构的情况下,重用和定制算法的不同部分。

以下是一个示例,演示了模板方法模式的用法:

访问者模式

访问者模式(Visitor Pattern)是一种行为设计模式,用于分离数据结构和数据结构上的操作。它允许你在不改变数据结构的前提下,定义新的操作(访问者),并将这些操作应用于数据结构中的元素。访问者模式常用于复杂的对象结构,其中对象之间的操作非常多且多变,同时需要保持数据结构的稳定性。

访问者模式的核心思想是将数据结构的元素接受访问者对象,然后由访问者对象执行操作。这种方式使得数据结构和操作之间的耦合降低,同时也增加了操作的扩展性,因为你可以轻松地添加新的访问者来执行不同的操作,而无需修改数据结构。

你可能感兴趣的:(设计模式,学习,笔记)