// XML 报文解析策略 public class XmlMessageParserStrategy implements MessageParserStrategy { @Override public void parse(Message message) { System.out.println("解析 XML 报文: " + message.getContent()); } } // JSON 报文解析策略 public class JsonMessageParserStrategy implements MessageParserStrategy { @Override public void parse(Message message) { System.out.println("解析 JSON 报文: " + message.getContent()); } } // CSV 报文解析策略 public class CsvMessageParserStrategy implements MessageParserStrategy { @Override public void parse(Message message) { System.out.println("解析 CSV 报文: " + message.getContent()); } }
然后结合工厂模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
public class MessageParserStrategyFactory { private static final Map strategies = new HashMap<>(); static { strategies.put("XML", new XmlMessageParserStrategy()); strategies.put("JSON", new JsonMessageParserStrategy()); strategies.put("CSV", new CsvMessageParserStrategy()); } public static MessageParserStrategy getStrategy(String messageType) { MessageParserStrategy strategy = strategies.get(messageType.toUpperCase()); if (strategy == null) { throw new IllegalArgumentException("未知的报文类型: " + messageType); } return strategy; } }
然后配置报文解析类
1 2 3 4 5 6 7
public class MessageParserContext { public void parseMessage(Message message) { MessageParserStrategy strategy = MessageParserStrategyFactory.getStrategy(message.getType()); strategy.parse(message); } }
使用
1 2 3 4 5 6 7 8 9 10 11 12 13
public class Main { public static void main(String[] args) { MessageParserContext parserContext = new MessageParserContext(); // 自动使用 XML 报文解析策略 parserContext.parseMessage(new Message("XML", "这是一个 XML 报 文")); // 自动使用 JSON 报文解析策略 parserContext.parseMessage(new Message("JSON", "{\"message\": \"这是一 个 JSON 报文\"}")); // 自动使用 CSV 报文解析策略 parserContext.parseMessage(new Message("CSV", "这是一个,CSV,报文")); } }