Какой шаблон проектирования лучше использовать - PullRequest
0 голосов
/ 29 мая 2020

Итак, у меня есть интерфейс Generator:

public interface Generator
{
    public Generator getInstance(); (The problem is here - methods in interface can't be static)
    public Account generate() throws WalletInitializationException;
}

И 2 других класса, которые реализуют интерфейс.

Теперь я хотел бы иметь класс GeneratorFactory, который получает объект класса Class , вызывает метод getInstance () и возвращает объект класса.

Примерно так:

public class GeneratorFactory
{
    private GeneratorFactory()
    {
    }

    public static Generator getGenerator(Class<Generator> generatorClass)
    {
        return (Generator) generatorClass.getMethod("getInstance", null).invoke((Need to have instance) null, null); (Should be runtime error)
    }
}

Но поскольку метод getInstance () является методом экземпляра, а не stati c метода, я не могу вызвать invoke () с нулевым параметром для экземпляра.

Я подумал о создании абстрактного класса Factory, который содержит метод getInstance () и абстрактный метод generate () для Generators, чтобы реализовать его, будет ли это правильный подход?

1 Ответ

0 голосов
/ 29 мая 2020

В итоге я не использовал синглтон. Просто используйте обычную фабрику со следующим методом, использующим отражение:

    public static Generator getGenerator(Class<? extends Generator> generatorClass)
    {
        try
        {
            return generatorClass.newInstance();
        }
        catch (Exception e)
        {
            return null;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...