我正在阅读SOLID's Open/Closed Principle今天,我记得的第一个例子是Android支持库中的ViewDragHelper类。
以下是班级详情:
// 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?
郎朗坤
相关分类