gpt4 book ai didi

parsing - 解析文本的设计模式

转载 作者:行者123 更新时间:2023-12-01 13:42:07 24 4
gpt4 key购买 nike

我有一个逻辑问题。我必须编写一个程序来解析不同类型的消息。
下面我展示了一个示例,这些消息的外观:

MESS1

DATE=06.06.2016
CAR_MODEL=OPEL

#Total_Number3
#Max_HP123


MESS2

DATE=12.01.2016
CAR_MODEL=FORD

MARTIN/SMITH
JOHN/PUTIN


MESS3

DATE=13.12.2016
CAR_MODEL=BMW

1/3/4

我知道以简单的方式编写代码并不难,但我想使用设计模式来实现它,这样我就可以轻松地修改它
出现新类型的消息,某些类型的消息更改或消息包含不同顺序的数据。

P.S 我在考虑 Builder 但消息不包含相同的字段,所以在我看来它不适合。

提前问候和感谢!

最佳答案

根据您的问题,我假设您有几个 MessageFormats,它们有一些共同的字段,而有些则没有,并且需要一种机制来解析它们中的每一个。

Visitor模式是您绝对要寻找的。

您可以按如下方式组织类(class)。所以不同的MessageFormats是这里的访问者。它们可以从一个共同的父级继承,因为它们具有一些共同的属性,而 MessageParser 是相应地对待每个访问者的看护者。

public abstract class MessageFormat{
private String commonField1;
private String commonField2;

//getters and setters.
}

public class MessageFormat1 extends MessageFormat{
private String nonCommonField1;
private String nonCommonField2;

//getters and setters.
}

像上面一样,您可以定义不同的消息格式 MessageFormat2、MessageFormat3 等。现在您应该使用 method overloading实现看守类(MessageParser)的方法来完成访问者模式。
public class MessageParser{

public void parse(MessageFormat1 mf){
//logic specific to MessageFormat1.
}

public void parse(MessageFormat2 mf){
//logic specific to MessageFormat2.
}

}

如果你想有一些通用的逻辑来解析公共(public)字段,你可以在 MessageParser 类中执行类似下面的操作。
public class MessageParser{

public void parse(MessageFormat1 mf){
parse(mf); //calling private method.
//logic specific to MessageFormat1.
}

private void parse(MessageFormat mf){
//logic common to all MessageFormats.
}

}

请注意,我提到的返回类型应根据您的要求进行调整。

关于parsing - 解析文本的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39185162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com