【发布时间】:2017-04-08 08:34:51
【问题描述】:
Java 程序
enum FILE_TYPE {
XML, JSON;
}
interface Parser {
void parse();
}
class XMLparser implements Parser {
public void parse() { }
}
class JSONparser implements Parser {
public void parse() { }
}
interface Mapper {
void map();
}
class XMLmapper implements Mapper {
public void map() { }
}
class JSONmapper implements Mapper {
public void map() { }
}
class ParserFactory {
public static Parser getInstance(FILE_TYPE fileType) {
switch(fileType) {
case XML:
return new XMLparser();
case JSON:
return new JSONparser();
}
return null;
}
}
class MapperFactory {
public static Mapper getInstance(FILE_TYPE fileType) {
switch(fileType) {
case XML:
return new XMLmapper();
case JSON:
return new JSONmapper();
}
return null;
}
}
在上面的java程序中,两个工厂方法生成不同的接口实例都依赖于相同的条件,即都使用相同的枚举FILE_TYPE。
在这种情况下使用两个工厂方法是否正确? 约束是我不能将两个接口合二为一。
我是java设计的新手,请帮助我
【问题讨论】:
-
你的命名完全违背了Java约定。类总是是
PascalCase;camelCase为变量保留。UPPER_SNAKE_CASE保留用于编译时常量。请相应地更新您的代码。 -
至于实际问题;我建议您使用
getParser和getMapper方法创建interface ParserMapper或类似的方法。让您的工厂返回ParserMapper- 除非有任何理由将XmlMapper与JsonParser一起使用。 -
@BoristheSpider 你是对的,但想法是解析器本身将被其他模块重用,所以我将两者分开。
-
然后将
parserMapper.getParser传递给该模块。有什么问题?! -
enum FILE_TYPE- 这个名字还是错误的。见getInstance(FILE_TYPE fileType)。
标签: java oop object design-patterns