0%

中介者模式(Mediator Pattern):封装交互,解耦对象

中介者模式是行为型设计模式的一种,核心思想是通过一个中介对象封装多个对象(同事)之间的交互,使同事对象无需直接相互引用,从而降低耦合度,且可以独立地改变它们之间的交互方式。这种模式就像 “聊天室主持人”—— 多个用户(同事)通过主持人(中介者)传递信息,无需知道彼此的存在,所有交互由主持人协调,本质是 “集中管理交互,减少直接依赖”。

中介者模式的核心结构

中介者模式

中介者模式通过四个核心角色实现对象间的间接交互,职责分明且解耦效果显著:

中介者接口(Mediator)

  • 定义同事对象之间交互的接口,声明用于协调同事的方法(如changed(Colleague)—— 当同事状态改变时通知中介者)。
  • 示例:ChatMediator(聊天室中介者接口,声明sendMessage(String msg, User user)方法)。

具体中介者(ConcreteMediator)

  • 实现中介者接口,维护所有同事对象的引用,并实现具体的协调逻辑:当某个同事状态改变时,中介者负责通知其他相关同事做出响应。
  • 示例:ConcreteChatMediator(具体聊天室中介者,管理用户列表并转发消息)。

同事类抽象(Colleague)

  • 定义同事对象的抽象接口,持有中介者的引用(通过构造方法注入),提供与中介者交互的方法(如通知中介者自身状态改变)。
  • 示例:User(用户抽象类,包含send(String msg)receive(String msg)方法)。

具体同事类(ConcreteColleague)

  • 实现同事类抽象,代表具体的交互对象,当自身状态改变时,通过中介者通知其他同事,而不直接与其他同事交互。
  • 示例:ChatUser(具体用户,发送消息时通过中介者转发,接收中介者传递的消息)。

代码实现示例

以 “聊天室” 为例,展示中介者模式的实现:多个用户通过聊天室中介者发送和接收消息,用户之间无需直接关联,所有消息通过中介者转发。

阅读全文 »

命令模式(Command Pattern):封装请求的艺术

命令模式是行为型设计模式的一种,核心思想是将请求(方法调用)封装为一个独立的对象,使请求的发送者与接收者解耦。通过命令对象,可实现请求的参数化、排队、日志记录及撤销等功能,本质是 “将操作封装为对象,实现请求的灵活管理”。

命令模式的核心结构

命令模式

命令模式通过四个核心角色实现请求的封装与解耦,分工明确且扩展性强:

命令接口(Command)

  • 定义命令的抽象接口,声明执行命令的方法(通常为execute()),是所有具体命令的父类。
  • 示例:OrderCommand(订单命令接口,声明execute()方法)。

具体命令(ConcreteCommand)

  • 实现命令接口,封装具体的请求逻辑,通常持有接收者(Receiver)的引用,并在execute()方法中调用接收者的相关方法完成请求。
  • 示例:PayOrderCommand(支付订单命令)、CancelOrderCommand(取消订单命令)。

接收者(Receiver)

  • 真正执行命令的对象,包含完成命令所需的业务逻辑(如支付、取消等操作)。
  • 示例:OrderService(订单服务,提供pay()cancel()等方法)。

调用者(Invoker)

  • 触发命令执行的对象,持有命令对象的引用,通过调用命令的execute()方法触发请求,不直接与接收者交互。
  • 示例:OrderController(订单控制器,接收用户请求并触发对应命令)。

代码实现示例

以 “订单管理系统” 为例,展示命令模式的实现:支持支付订单和取消订单操作,通过命令对象封装这些操作,实现解耦和日志记录。

阅读全文 »

原型模式(Prototype Pattern):通过克隆高效创建对象

原型模式是创建型设计模式的一种,核心思想是通过复制(克隆)现有对象(原型)来创建新对象,而非通过new关键字重新实例化。这种模式特别适合创建复杂对象或频繁创建相似对象的场景,能有效提高创建效率并简化流程。

原型模式的核心结构

原型模式

原型模式的实现依赖两个关键要素,结构简洁但功能明确:

原型接口 / 类(Prototype)

  • 声明克隆自身的方法(通常名为clone())。
  • 在 Java 中,通常通过实现Cloneable接口(标识接口)并重写Object.clone()方法实现。

具体原型(Concrete Prototype)

  • 实现原型接口,具体定义克隆逻辑(深拷贝或浅拷贝)。
  • 示例:UserProduct等需要被克隆的类。

原型模式的实现步骤

在 Java 中实现原型模式需遵循以下步骤:

1. 实现Cloneable接口

Cloneable是一个标识接口(无任何方法),用于通知 JVM:该类可以被安全克隆。若未实现此接口,调用clone()会抛出CloneNotSupportedException

阅读全文 »

建造者模式(Builder Pattern):复杂对象的分步构建艺术

建造者模式(又称生成器模式)是创建型设计模式的一种,核心思想是将复杂对象的构建过程与表示分离,使得同样的构建流程可以生成不同的产品表示。这种模式特别适合处理由多个部件组成、构建步骤复杂的对象(如汽车、文档、配置项等)。

建造者模式的核心结构

构建器模式

建造者模式通过四个核心角色实现复杂对象的构建,分工明确且各司其职:

产品(Product)

  • 定义被构建的复杂对象,包含多个组成部件(如汽车的发动机、底盘、车身等)。
  • 示例:Computer(包含 CPU、内存、硬盘等部件)。

建造者接口(Builder)

  • 声明构建产品各个部件的抽象方法(如buildCPU()buildMemory()),以及返回最终产品的方法(如getResult())。
  • 作用:规范构建流程,确保所有具体建造者遵循统一的步骤。

具体建造者(ConcreteBuilder)

  • 实现建造者接口,具体实现每个部件的构建逻辑,并负责将部件组装成产品。
  • 示例:GameComputerBuilder(构建游戏电脑,侧重高性能 CPU 和显卡)、OfficeComputerBuilder(构建办公电脑,侧重稳定性)。

指导者(Director)

  • 负责控制构建流程,调用建造者接口的方法按顺序构建产品,不直接参与部件的具体构建。
  • 作用:隔离客户端与构建过程,确保构建步骤的一致性。

代码实现示例

以 “自定义电脑组装” 为例,展示建造者模式的具体应用:

阅读全文 »

模板方法模式(Template Method Pattern):固定算法骨架,灵活定制步骤

模板方法模式是行为型设计模式的一种,核心思想是在抽象类中定义一个算法的骨架(模板方法),将算法中可变的步骤延迟到子类中实现,使得子类在不改变算法整体结构的前提下,可自定义某些特定步骤。这种模式就像 “文档模板”—— 模板规定了文档的整体结构(如标题、正文、结尾),用户只需填充具体内容即可,核心是 “固定骨架,灵活填充”。

模板方法模式的核心结构

模板方法模式

模板方法模式通过抽象类和子类的配合实现算法的复用与扩展,包含三种关键方法:

模板方法(Template Method)

  • 定义在抽象类中,描述算法的骨架,按顺序调用其他方法(抽象方法、钩子方法),构成完整的算法流程。
  • 通常用final修饰,防止子类修改算法结构。
  • 示例:makeBeverage()(制作饮料的模板方法,依次调用 “煮水→冲泡→倒杯→加配料”)。

抽象方法(Abstract Method)

  • 由抽象类声明、子类必须实现的方法,对应算法中可变的步骤。
  • 示例:brew()(冲泡,咖啡和茶的冲泡方式不同)、addCondiments()(加配料,咖啡加奶,茶加糖)。

钩子方法(Hook Method)

  • 由抽象类声明并提供默认实现(可为空),子类可选择重写,用于控制算法流程或添加额外逻辑。
  • 示例:isAddCondiments()(是否加配料,子类可通过返回false跳过该步骤)。

代码实现示例

以 “饮料制作流程” 为例,展示模板方法模式的实现:咖啡和茶的制作流程基本相同(煮水→冲泡→倒杯→加配料),但冲泡方式和配料不同,通过模板方法固定流程,子类实现差异步骤。

阅读全文 »