Что такое Design Pattern, где мы можем передать имя строки в метод, и этот метод выбирает, какой метод вызывать - PullRequest
0 голосов
/ 15 мая 2018

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

это хороший способ решения проблемы или есть и лучший способ

public static final String ACTION_CHARGING_REMINDER = "charging-reminder";
public static void executeTask(Context context, String action) {
    if (ACTION_INCREMENT_WATER_COUNT.equals(action)) {
        incrementWaterCount(context);
    } else if (ACTION_DISMISS_NOTIFICATION.equals(action)) {
        NotificationUtils.clearAllNotifications(context);
    } else if(ACTION_CHARGING_REMINDER.equals(action)){
        issueChargeReminder(context);
    }
}

Ответы [ 2 ]

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

Это очень похоже на шаблон реакции / редукса, действие / уменьшение .

Редукторы определяют, как изменяется состояние приложения в ответ на действия, отправленные в хранилище.Помните, что действия только описывают то, что произошло, но не описывают, как изменяется состояние приложения.

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

Я бы сделал что-то подобное. Это можно расширить столько, сколько вы хотите, и, очевидно, просто пример:

static abstract class ActionHandler {

    private String action;

    public ActionHandler(String action) {
        this.action = action;
    }

    public boolean canHandleAction(String input) {
        return this.action.equals(input);
    }

    public abstract void handleAction();
}

static class OneActionHandler extends ActionHandler {

    public OneActionHandler(String action) {
        super(action);
    }

    @Override
    public void handleAction() {
        //...
    }
}

static class TwoActionHandler extends ActionHandler {

    public TwoActionHandler(String action) {
        super(action);
    }

    @Override
    public void handleAction() {
        //...
    }
}

static class Test {

    private ActionHandler[] handlers;

    public Test() {
        handlers = new ActionHandler[]{new OneActionHandler("action1"), new TwoActionHandler("action2")};
    }

    public void handleAction(String action) {
        for(ActionHandler i : handlers) {
            if(i.canHandleAction(action)) {
                i.handleAction();
                break;
            }
         }
    }

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