Java策略模式应用实战

devtools/2024/11/20 14:36:14/

Java策略模式应用实战

推送内容并预检

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;// DTO class
class DataDTO {private String type;private String field1;private String field2;// Other fields...// Getters and Setterspublic String getType() { return type; }public void setType(String type) { this.type = type; }public String getField1() { return field1; }public void setField1(String field1) { this.field1 = field1; }public String getField2() { return field2; }public void setField2(String field2) { this.field2 = field2; }
}// Define an interface for the push service
interface PushService {void push(DataDTO dto);boolean preCheck(DataDTO dto);
}// Implementation for TypeA
class TypeAPushService implements PushService {@Overridepublic void push(DataDTO dto) {// Logic to push data for TypeALogger.getLogger(TypeAPushService.class.getName()).log(Level.INFO, "Pushing data for TypeA: {0}", dto);}@Overridepublic boolean preCheck(DataDTO dto) {// Check required fields for TypeAreturn PreCheckUtil.commonPreCheck(dto, DTOType1.class);}
}// Implementation for TypeB
class TypeBPushService implements PushService {@Overridepublic void push(DataDTO dto) {// Logic to push data for TypeBLogger.getLogger(TypeBPushService.class.getName()).log(Level.INFO, "Pushing data for TypeB: {0}", dto);}@Overridepublic boolean preCheck(DataDTO dto) {// Check required fields for TypeBreturn PreCheckUtil.commonPreCheck(dto, DTOType2.class);}
}// Utility method for common pre-check logic
class PreCheckUtil {private static final Logger LOGGER = Logger.getLogger(PreCheckUtil.class.getName());public static <T> boolean commonPreCheck(DataDTO dto, Class<T> requiredFieldsClass) {try {Field[] fields = requiredFieldsClass.getDeclaredFields();for (Field field : fields) {field.setAccessible(true);Field dtoField;try {dtoField = dto.getClass().getDeclaredField(field.getName());} catch (NoSuchFieldException e) {continue; // Skip fields that do not exist in DataDTO}dtoField.setAccessible(true);Object value = dtoField.get(dto);if (value == null) {return false;}}} catch (IllegalAccessException e) {LOGGER.log(Level.SEVERE, "Error during pre-check: {0}", e.getMessage());return false;}return true;}
}// DTOType1 class representing required fields for TypeA
class DTOType1 {private String field1;// Other required fields for TypeA...
}// DTOType2 class representing required fields for TypeB
class DTOType2 {private String field2;// Other required fields for TypeB...
}// Context class to manage different PushServices
class PushServiceContext {private static final Logger LOGGER = Logger.getLogger(PushServiceContext.class.getName());private final Map<String, PushService> serviceMap = new HashMap<>();public void registerService(String type, PushService service) {serviceMap.put(type, service);}public void pushData(DataDTO dto) {PushService service = serviceMap.get(dto.getType());if (service == null) {LOGGER.log(Level.SEVERE, "No PushService found for type: {0}", dto.getType());return;}if (service.preCheck(dto)) {service.push(dto);} else {LOGGER.log(Level.WARNING, "Pre-check failed for type: {0}, skipping push.", dto.getType());}}
}// Main class to demonstrate the functionality
public class PushDataDemo {public static void main(String[] args) {// Initialize context and register servicesPushServiceContext context = new PushServiceContext();context.registerService("TypeA", new TypeAPushService());context.registerService("TypeB", new TypeBPushService());// Create DTOs and push dataDataDTO dtoA = new DataDTO();dtoA.setType("TypeA");dtoA.setField1("Value1");context.pushData(dtoA); // Should push successfullyDataDTO dtoB = new DataDTO();dtoB.setType("TypeB");// dtoB.setField2("Value2"); // Field2 is required for TypeB, but it's missingcontext.pushData(dtoB); // Should skip due to failed pre-check}
}

http://www.ppmy.cn/devtools/135502.html

相关文章

【大数据学习 | flume】flume的概述与组件的介绍

1. flume概述 Flume是cloudera(CDH版本的hadoop) 开发的一个分布式、可靠、高可用的海量日志收集系统。它将各个服务器中的数据收集起来并送到指定的地方去&#xff0c;比如说送到HDFS、Hbase&#xff0c;简单来说flume就是收集日志的。 Flume两个版本区别&#xff1a; ​ 1&…

Flink新版Source接口源码解析

目录 1. 前言 2. Source解析 2.1 Source类图 2.2 接口和方法说明 2.2.1 Source,> 3. SplitEnumerator解析 3.1 SplitEnumetator类图 3.2 类和方法说明 3.2.1 SplitEnumerator 3.2.2 SimpleVersionedSerializer 4. SourceReader解析 4.1 SourceReader类图 4.2 类…

内存、显存和GPU在Transformer架构中承担什么计算任务

目录 内存、显存和GPU在Transformer架构中承担什么计算任务 一、内存、显存和GPU的区别 二、在Transformer架构中的计算任务 内存、显存和GPU在Transformer架构中承担什么计算任务 是计算机系统中重要的组成部分,它们在Transformer架构中承担着不同的计算任务。以下是对这…

单片机学习笔记 5. 数码管静态显示

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~ 目录 0、实现的功能 1、Keil工程 1-1 数码管显示原理 1-2 静态与动态显示 1-3 74HC573锁存器的工作原理 1-…

【GNU】反汇编工具objdump

1、什么是 objdump objdump 是 GNU Binutils 工具集中的一个命令行工具&#xff0c;用于分析和显示目标文件&#xff08;如二进制文件、目标文件、静态库和可执行文件&#xff09;的详细信息。它是开发调试、优化和逆向工程的利器。他可以做到&#xff1a; 反汇编功能&#x…

01_MinIO部署(Windows单节点部署/Docker化部署)

单节点-Windows环境安装部署 在Windows环境安装MinIO&#xff0c;主要包含两个东西&#xff1a; MinIO Server&#xff08;minio.exe&#xff09;&#xff1a;应用服务本身MinIO Client&#xff08;mc.exe&#xff09;&#xff1a;MinIO客户端工具&#xff08;mc&#xff09;…

linux中的SIGPIPE信号有什么用?

信号概述 SIGPIPE是一种信号&#xff0c;信号是Unix和类Unix系统中用于进程间通信的一种机制&#xff0c;用于通知进程发生了某个特定的事件。当一个进程接收到SIGPIPE信号时&#xff0c;它表明在管道或者套接字的写入操作出现了问题。 在管道中的应用 管道原理简介&#xff1…

使用 Vue 和 Create-Vue 构建工程化前端项目

目录 前言1. 工程化的意义与 Vue 的生态支持2. 搭建 Vue 工程化项目2.1 环境准备2.2 使用 create-vue 创建项目2.2.1 初始化项目2.2.2 安装依赖2.2.3 本地运行 3. Vue 项目的目录结构解析4. Vue 开发流程详解4.1 项目入口与根组件4.1.1 main.js 的作用4.1.2 App.vue 的结构 4.2…