如何停止在这种情况下调用构造函数

时间:2019-05-17 01:04:02

标签: java

我正在尝试实现一种工厂模式,其中该方法将我返回到正确的对象。调用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,否则它不应对构造函数进行任何调用。

1 个答案:

答案 0 :(得分:1)

您的代码尚不完整,但您可能会猜到您的其他TokenFilter实现类:

  • ExcerptFilterStopOnly
  • ExcerptFilterStartAndStop
  • ExcerptFilterStartOnly

全部从ExcerptFilter类扩展,并且如果您不希望调用ExcerptFilter构造函数,则不能让这些类从其扩展。

另一种可能的解决方案:

  • 是的,让这些类从ExcerptFilter扩展而给ExcerptFilter多个构造函数,并通过明确地调用正确的超级构造函数来严格控制子类中的哪个构造函数。