2010-11-08 55 views
0

的java我目前使用我厂这样的工厂模式问题

public class AbstractFactory 
{ 
    public static AbstractHeader parseHeader(File file) 
    { 
      if(AFactory.canRead(file))return AFactory.parseHeader(file); 
      if(BFactory.canRead(file))return BFactory.parseHeader(file); 

      throw new UnsupportedOperationException("File ["+file+"] not supported"); 
    } 

    public static AbstractContent parseContent(AbstractHeader h) 
    { 
      if(h instanceof AHeader){ 
        return AFactory.parseContent((AHeader) h); 
      } 
      if(h instanceof BHeader){ 
        return BFactory.parseContent((BHeader) h); 
      } 
      throw new UnsupportedOperationException("Header not supported"); 
    } 
} 

的parseHeader()将返回一个实例要么AHeader或BHeader,并在以后的时间会要求AbstractContent。有一个更好的方法吗 ?带着instanceof检查?

+0

+1 Darron的回答。另外,一个风格问题:AbstractFactory不是抽象的,所以名称是误导性的。 – 2010-11-08 19:31:02

回答

5

下面的代码添加到您现有的类:

public abstract class AbstractHeader { 
    abstract AbstractContent parseContent(); 
} 

public class AHeader extends AbstractHeader { 
    public AbstractContent parseContent() { 
     return AFactory.parseContent((AHeader) h); 
    } 
} 

public class BHeader extends AbstractHeader { 
    public AbstractContent parseContent() { 
     return BFactory.parseContent((AHeader) h); 
    } 
} 

现在你可以叫h.parseContent()。这被称为多态性。

+0

+1非常干净的解决方案。使课堂更加容易。 – helpermethod 2010-11-08 18:42:48

+0

off-course!我对工厂的想法很盲目,甚至没有想到更简单的解决方案! – Anon 2010-11-08 18:54:12