为了账号安全,请及时绑定邮箱和手机立即绑定

这是一种策略模式还是只是一种回调?

这是一种策略模式还是只是一种回调?

www说 2021-09-15 16:08:10
我正在阅读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的具有行为改变CallbackS'getViewHorizontalDragRange()clampViewPositionHorizontal()实现(策略模式)。并通过和实现(观察者模式)ViewDragHelper通知 aCallback的实例有关ViewDragHelper的当前状态。onViewPositionChanged()tryCaptureView()


查看完整回答
反对 回复 2021-09-15
  • 1 回答
  • 0 关注
  • 203 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信