- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
比如说,我有 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
}
}
这会更好,因为解析器的创建将由工厂负责,并且在我看来这更有意义。
关于当扁平化或包含不必要的过程以简化使用时,Java OO 概念会更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14976884/
jQuery attributeContainsPrefix [name^="value"] 对比 attributeStartsWith [name|="value"] 实际区别是什么? 最佳答案
在1.1部分在RFC 6749中,有四种角色:资源拥有者、资源服务器、客户端和授权服务器。 如果客户端和资源所有者是同一实体,OAuth 是否变得多余或不必要? 例如,我有一个封闭的 API 和一个面
我有一段代码,其中有一个带有保护子句的 raise 语句: def validate_index index # Change to SizeError raise ArgumentError
我看到了这篇文章( JPA Entity Lifecycle Events vs database trigger ),但它并没有像我在这里那样明确地询问: 当我插入 PK 值为 (null) 的行时
所以,我有一段代码看起来像 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2){ // Do something }
我是一名优秀的程序员,十分优秀!