Это шаблон стратегии или просто обратный вызов? - PullRequest
0 голосов
/ 12 сентября 2018

Сегодня я читал о SOLID's Open/Closed Principle, и первый пример, который я запомнил, был ViewDragHelper класс в Android библиотеке поддержки.

Вот подробности о классе:

// allowing a user to drag and reposition views
public class ViewDragHelper {
    private final Callback mCallback;

    public static ViewDragHelper create(..., Callback cb)

    public abstract static class Callback {
        public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) { }

        public int getViewHorizontalDragRange(View child) {
            return 0;
        }

        public abstract boolean tryCaptureView(View child, int pointerId);

        public int clampViewPositionHorizontal(View child, int left, int dx) {
            return 0;
        }
    }
}

Я пытаюсь выяснить, является ли это реализацией strategy pattern.На самом деле кажется, что это так.Существует класс Context (ViewDragHelper) и абстракция Strategy (класс Callback).Но есть два момента:

  • Конкретная реализация стратегии делегирована конечному пользователю библиотеки.
  • Поведение реализации стратегии влияет на Context (вы можетеограничить позицию просмотра или запретить операцию перетаскивания в методе tryCaptureView, в то время как в описании Strategy pattern Strategy, кажется, не оказывает никакого влияния на Context (то есть только производит или потребляет некоторые данные).

Это Strategy или какой-то другой шаблон или просто реализация таких общих понятий, как Callback?

1 Ответ

0 голосов
/ 12 сентября 2018

Это Strategy или какой-то другой шаблон или просто реализация таких общих понятий, как Callback?

Нет, это не шаблон стратегии в его классическое определение , это скорее сочетание стратегии и паттерна наблюдателя .Поведение ViewDragHelper меняется с реализациями Callback * getViewHorizontalDragRange() и clampViewPositionHorizontal() ( Паттерн стратегии ).И ViewDragHelper уведомляет экземпляр Callback о текущем состоянии ViewDragHelper через реализации onViewPositionChanged() и tryCaptureView() (Observer Pattern).

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