我正在尝试实现一种工厂模式,其中该方法将我返回到正确的对象。调用factory方法时,将调用我的私有构造函数,这将对该类的结果产生影响。
我将print语句放入构造函数中,以查看是否被调用,无论工厂提供了什么字符串,都会导致调用。
public class ExcerptFilter implements TokenFilter
{
private boolean started;
private ExcerptFilter() {
start();
System.out.println("constructor called");
}
public static TokenFilter factory(String startTag, String stopTag) {
TokenFilter result;
if(startTag != null && startTag.trim().length() > 0){
if(stopTag != null && stopTag.trim().length() > 0) result = new ExcerptFilterStartAndStop(startTag, stopTag);
else result = new ExcerptFilterStartOnly(startTag);
}else{
if(stopTag != null && stopTag.trim().length() > 0) result = new ExcerptFilterStopOnly(stopTag);
else result = new ExcerptFilter();
}
return result;
}
工厂应在ExcerptFilter中返回嵌套类的正确实例。除非factory()的who参数的长度为零或为null,否则它不应对构造函数进行任何调用。
答案 0 :(得分:1)
您的代码尚不完整,但您可能会猜到您的其他TokenFilter实现类:
全部从ExcerptFilter类扩展,并且如果您不希望调用ExcerptFilter构造函数,则不能让这些类从其扩展。
另一种可能的解决方案: