我今天读的是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
这样的通用概念的实现?
答案 0 :(得分:2)
这是
Strategy
还是其他某种模式,或者仅仅是Callback
这样的通用概念的实现?
否,它不是classical definition中的策略模式,而是策略和Observer Pattern两者的结合。 ViewDragHelper
的行为随着Callback
的{{1}}和getViewHorizontalDragRange()
实现(策略模式)而改变。并且clampViewPositionHorizontal()
通过ViewDragHelper
和Callback
实现(观察者模式)向ViewDragHelper
的实例通知onViewPositionChanged()
的当前状态。