我正在阅读SOLID's Open/Closed Principle今天,我记得的第一个例子是Android支持库中的ViewDragHelper类。以下是班级详情:// allowing a user to drag and reposition viewspublic 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 回答
郎朗坤
TA贡献1921条经验 获得超9个赞
这是一个
Strategy
或其他一些模式还是只是这样一个常见概念的实现Callback
?
不,它不是经典定义中的Strategy Pattern ,而是 Strategy 和Observer Pattern两者的组合。ViewDragHelper
的具有行为改变Callback
S'getViewHorizontalDragRange()
与clampViewPositionHorizontal()
实现(策略模式)。并通过和实现(观察者模式)ViewDragHelper
通知 aCallback
的实例有关ViewDragHelper
的当前状态。onViewPositionChanged()
tryCaptureView()
添加回答
举报
0/150
提交
取消