[英]Folder-by-feature and decorator design pattern
按功能的文件夹和装饰器模式
如果我有一个具有关联的Stream
的Parser
,则当我逐步处理Tokens
,我将在Stream
向前移动时改变对象的状态。 我想向该解析器添加特定于应用程序的功能,以维持单一职责的原则,因此我认为Decorator设计模式是一个适当的选择。 现在,我将Parser
包装在ParserDecorator(Parser)
并添加特定的功能,例如将数据映射到Object
并返回该Object
readPerson()
或readItem()
。
首先,我考虑在Person
中创建一个静态函数,以Parser
作为参数。 但是,该函数将继续处理流,因此我决定并非在所有情况下都是线程安全的。 但是,由于ParserDecorator
返回不同类型的对象,因此无法将其仅与Person
逻辑分组。 因此,如果以后更改Person类,我必须记住要更改ParserDecorator
读取它的方式,该ParserDecorator
位于程序的不同部分,项目中的新开发人员可能不会检查该位置。 通常,我按功能部署文件夹,因此所有需要进行的更改都放在一起,但是在这种情况下不起作用。
使用纯面向对象的方法,是否有更好的解决方案? 现在,我有一个名为util的独立功能文件夹,其中包含此类。
编辑:示例代码:
public class JsonParserDecorator {
private final JsonParser jsonParser;
public JsonParserDecorator(JsonParser jsonParser) {
this.jsonParser = jsonParser;
}
public Item readItem() throws IOException {
Item item = new Item();
if (jsonParser.currentToken() != JsonToken.START_OBJECT) {
throw new IOException("JSON object expected");
}
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
String fieldName = jsonParser.currentName();
jsonParser.nextToken();
switch (fieldName) {
case "itemId":
item.setId(jsonParser.getLongValue());
break;
case "description":
item.setDescription(jsonParser.getText());
break;
default:
break;
}
}
return item;
}
}
经过一整夜的思考,我得出了一个解决方案。 我创建了一个名为ItemJson
的新类,并添加了read(JsonParser jsonParser)
和write(JsonGenerator jsonGenerator, Item item)
方法。 这样可以将所有类似的类/功能组合在一起,并在一个单独的类中处理数据的重新格式化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.