gpt4 book ai didi

当扁平化或包含不必要的过程以简化使用时,Java OO 概念会更好吗?

转载 作者:行者123 更新时间:2023-12-01 17:25:57 25 4
gpt4 key购买 nike

比如说,我有 DataObject 类型的 Json 解析器类,如下所示:

class JsonDataParser{
public DataObject parseData(String data){
// Parse data
return dataObject;
}
}

现在我必须连接到服务器才能获取 Json,所以我有这个:

class DataRetriever{
public String getData(){
// Get data from server using URL
return jsonDataString;
}
}

问题是,在主类中编写如下代码(方法-A)是否更好

DataObject d = new JsonDataParser().parseData(new DataRetriever().getData());

或者修改DataRetriever以在内部包含Json解析(方法-B),如下所示:

class DataRetriever{
public DataObject getData(){
// Get data from server using URL
return new JsonDataParser().parseData(jsonDataString);
}
}

两种情况下的结果是相同的,但从概念上讲,使用方法 A 或方法 B 进行编码更好吗?

我通常会创建一个 Controller 类来遵循方法 A,但我不确定这是否有效。

编辑:
事实上,我正在考虑在解析Json时使用GenericType和Interface。所以我准备了以下内容:

public interface IJsonParser<T> {
public T parseJSON(String jsonString);
public T parseJSON(JSONObject jsonObject);
}

然后将其添加到 DataRetriever 的构造函数中,如下所示:

class DataRetriever<T>{
private IJsonParser<T> parser;

public DataRetriever(IJsonParser<T> parser){
this.parser = parser;
}

public DataObject getData(){
// Get data from server using URL
return new JsonDataParser().parseData(jsonDataString);
}
}

最终,我正在考虑允许多种类型的解析器,这样每次我们都可以提供自己的解析器来增加灵 active 。这是否被视为某种渎职行为?

最佳答案

在这里您不应该看到效率,因为两者的效率相同。但您不应该这样做,而应该考虑类的 future 可扩展性

在这方面,我认为方法 B 会很好,因为您可以更改解析器,以便将来使用其他解析器。

class DataRetriever{
private DataParser dataParser;

public DataRetriever(){
dataParser = new JsonDataParser(); //tomorrow this can be changed to something else
}

public DataObject getData(String data){
// Get data from server using URL
return dataParser.parseData(data);
}
}

更新:如果您正在为此寻找合适的 OOP 解决方案,那么您应该使用工厂模式,它将根据您提供的类型返回解析器的实例。

class ParserFactory{

//get parser
public DataParser createParser(int type){
//creates the new parser based on type and returns it
}

}

这会更好,因为解析器的创建将由工厂负责,并且在我看来这更有意义。

链接Factory Pattern

关于当扁平化或包含不必要的过程以简化使用时,Java OO 概念会更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14976884/

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