Сегодня я читал о 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
?