Как создать абстрактный класс адаптера, который заставляет подклассы вызывать определенные методы в конструкторе - PullRequest
0 голосов
/ 27 ноября 2018

Я ищу отзывы о дизайне, который я сделал для пользовательского класса адаптера в Java.Я пытаюсь создать элегантное решение для абстрактного класса адаптеров, которое можно расширить для создания уникальных адаптеров, которые могут подключаться к различным хранилищам данных.Вот некоторые требования

  • Каждый адаптер должен реализовывать функцию инициализации, которая устанавливает соединение
  • Каждый адаптер должен реализовывать функцию выполнения
  • Функция инициализации должна бытьвызывается при создании нового экземпляра класса адаптера
  • Каждый конструктор адаптера должен принимать объект конфигурации, который содержит всю информацию о соединении для этого конкретного адаптера.
  • Конфигурации являются уникальными для адаптера, но я хочу, чтобы способ принудительно считывал конфигурацию и устанавливал переменную конфигурации либо на уровне абстрактного класса, либо на уровне базового класса.

Я также решил использовать фабричный шаблон при создании нового адаптера, вот мой код ниже:

BaseAdapter.java

public abstract class BaseAdapter {

    private Configuration config;

    /*
        Default constructor
    */
    protected BaseAdapter(Configuration config) {
        this.config = config;
    }

    /*
        Abstract method that will initialize adapter with
        Configuration properties
    */
    public abstract void initialize(Configuration config);

    /*
        Abstract method that will execute query
    */
    public abstract void execute(String query);

ElasticSearchAdapter.java

public class ElasticSearchAdapter extends BaseAdapter {

    public ElasticSearchAdapter(Configuration config) {
        super(config);
        initialize(config);
    }

    @Override
    public void initialize(Configuration config) {
       //initialization implementation
    }

    @Override
    public void execute(String query) {
       //execute query
    }

}

BaseAdapterFactory.java

 public class BaseAdapterFactory {

     private static final String ES = "elasticsearch";

     public static BaseAdapter getBaseAdapter(String type, Configuration config) {

        if(ES.equals(type)) {
            return new ElasticSearchAdapter(config);
        }
        else {
            return null;
        }
    }
}

Мне было бы интересно, если бы там былоэто лучший способ разработать это на основе требований, изложенных выше.

1 Ответ

0 голосов
/ 30 ноября 2018

Фабричный шаблон - это путь туда.Вы также можете использовать эту опцию, чтобы избежать изменения заводских настроек при каждом добавлении нового адаптера.Помните принцип Open-Close: открыт для расширения закрыт для изменений.

Вы можете использовать фабрику с регистрацией класса .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...