Java 中的 Execute Around 模式:封装执行前和执行后步骤
也称为
- Around Method 模式
- 资源块管理
Execute Around 设计模式的意图
现实世界的业务应用程序通常需要在业务方法调用之前和之后执行必要的操作。Java 中的 Execute Around 模式提供了一种封装这些操作的方法,提高了代码的可读性和可重用性。
Execute Around 模式的详细解释以及现实世界中的例子
现实世界的例子
Execute Around 模式的现实世界类比可以在租车的使用中找到。当你租车时,租车公司会为你处理所有设置(清洁汽车、加满油、确保汽车状况良好)和清理(归还汽车、检查损坏、必要时加油)过程。作为客户,你只需将汽车用于预期目的,而无需担心设置和清理。这种围绕主要操作抽象掉重复性任务的模式类似于软件中的 Execute Around 模式,其中资源的设置和清理由可重用方法处理,允许主要逻辑无缝执行。
通俗地说
Execute Around 习语处理业务方法之前和之后的样板代码。
基本上,它是一种模式,你编写一个方法来执行始终需要的操作,例如资源分配和清理,并让调用者传递“我们要对资源做什么”。
Java 中 Execute Around 模式的编程示例
Execute Around 模式是一种在 Java 编程中广泛用于管理资源分配和释放的设计模式。它确保重要的设置和清理操作在核心业务操作周围可靠地执行。这种模式对于资源管理特别有用,例如在 Java 应用程序中处理文件、数据库或网络连接。
需要提供一个类来将文本字符串写入文件。为了方便用户,服务类会自动打开和关闭文件。用户只需指定要写入哪个文件的内容。
SimpleFileWriter
类实现了 Execute Around 习语。它以 FileWriterAction
作为构造函数参数,允许用户指定要写入文件的内容。
@FunctionalInterface
public interface FileWriterAction {
void writeFile(FileWriter writer) throws IOException;
}
@Slf4j
public class SimpleFileWriter {
public SimpleFileWriter(String filename, FileWriterAction action) throws IOException {
LOGGER.info("Opening the file");
try (var writer = new FileWriter(filename)) {
LOGGER.info("Executing the action");
action.writeFile(writer);
LOGGER.info("Closing the file");
}
}
}
以下代码演示了如何使用 SimpleFileWriter
。Scanner
用于在写入完成后打印文件内容。
public static void main(String[] args) throws IOException {
// create the file writer and execute the custom action
FileWriterAction writeHello = writer -> writer.write("Gandalf was here");
new SimpleFileWriter("testfile.txt", writeHello);
// print the file contents
try (var scanner = new Scanner(new File("testfile.txt"))) {
while (scanner.hasNextLine()) {
LOGGER.info(scanner.nextLine());
}
}
}
以下是控制台输出。
21:18:07.185 [main] INFO com.iluwatar.execute.around.SimpleFileWriter - Opening the file
21:18:07.188 [main] INFO com.iluwatar.execute.around.SimpleFileWriter - Executing the action
21:18:07.189 [main] INFO com.iluwatar.execute.around.SimpleFileWriter - Closing the file
21:18:07.199 [main] INFO com.iluwatar.execute.around.App - Gandalf was here
何时在 Java 中使用 Execute Around 模式
何时在 Java 中使用 Execute Around 模式
- 在需要重复设置和清理活动的场景中很有用,特别是在资源管理(例如文件、网络连接、数据库会话)中。
- 对于在出现异常时确保正确处理和清理资源非常理想,确保资源不会泄漏。
- 适合在任何 Java 应用程序中执行相同的准备和完成步骤,围绕不同的核心功能。
Execute Around 模式在 Java 中的现实世界应用
在现实世界的 Java 应用程序中,Execute Around 模式应用于以下场景
- Java 的 try-with-resources 语句,它确保无论是否抛出异常,资源都将在执行后关闭。
- 像 Spring 这样的框架用于管理数据库事务,其中根据执行结果执行预定义的清理或回滚操作。
Execute Around 模式的优缺点
在 Java 中实现 Execute Around 模式提供了几个优点和权衡。
优点
- 通过抽象例行设置和清理任务来减少样板代码。
- 通过将业务逻辑与资源管理分离,提高代码清晰度和可维护性。
- 通过自动处理资源清理,即使在错误情况下也能确保稳健性。
权衡
- 引入了额外的抽象层,这可能会增加复杂性并隐藏一些开发人员的控制流程。
- 可能需要对 Java 中的闭包和函数式接口有更深入的了解。