вопрос о фабрике java - PullRequest
       1

вопрос о фабрике java

0 голосов
/ 08 ноября 2010

В настоящее время я использую свою фабрику следующим образом:

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.Есть лучший способ сделать это ?Сойдет с рук чеков?

1 Ответ

5 голосов
/ 08 ноября 2010

Добавьте следующий код в существующие классы:

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 ().Это называется полиморфизмом.

...