Консультация по проектированию: вызов методов из нескольких классов - PullRequest
0 голосов
/ 13 мая 2018

Я решаю проблему, в которой я получу информацию от пользователя в следующей форме.

{
"serviceA":true,
"serviceB":true,
"serviceC":false,
"serviceD":true,
"serviceE":false,
"score":10
}

В зависимости от выбора пользователя мне нужно вызвать сервисы для сбора баллов. Этот сервисный вызов будет обновленоценка тогда с некоторым отрывом.Я сделал пакеты для всех этих услуг.

Здесь есть одно ограничение: они являются последовательными, т. Е. B может вызываться только после A, если оба активированы, иначе B может вызываться напрямую.

Я использую один файл Builder, где я получуначальная оценка, как указано выше, со всеми флагами обслуживания. Затем мне нужно вызвать все методы обслуживания с этой оценкой.Если бы я передал этот балл сервису A, тогда сервис B также должен был бы узнать балл по сервису A.

1 Ответ

0 голосов
/ 13 мая 2018

используя шаблон проектирования цепочки ответственности, я бы сделал что-то подобное

interface ServiceInterface {

    public int getScore(int score);
}

class service implements ServiceInterface {

    private boolean enabled;
    private int factor;
    private ServiceInterface nextService = null;

    public serviceA(boolean enabled, int factor){
        this.enabled = enabled;
        this.factor = factor;
    }

    public void setNextService(ServiceInterface service){
        this.nextService = service;
    }

    @Override
    public int getScore(int score) {
        if (this.enabled)
            score = score * this.factor;

        if (nextService != null)
            score = nextService.getScore(score);

        return score;
    }
}

и простой пример выполнения будет

int score = 10;
service a = new service(false, 4);
service b = new service(true, 3);
a.setNextService(b);
System.out.println(a.getScore(score));

выход

30

это будет определять a -> b как цепочку и вызывать getScore для a, а затем getScore для b, это будет вычислять счет или пропуск на основе enable переменной

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

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