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

我正在阅读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?


www说
浏览 204回答 1
1回答

郎朗坤

这是一个Strategy或其他一些模式还是只是这样一个常见概念的实现Callback?不,它不是经典定义中的Strategy Pattern ,而是 Strategy 和Observer Pattern两者的组合。ViewDragHelper的具有行为改变CallbackS'getViewHorizontalDragRange()与clampViewPositionHorizontal()实现(策略模式)。并通过和实现(观察者模式)ViewDragHelper通知 aCallback的实例有关ViewDragHelper的当前状态。onViewPositionChanged()tryCaptureView()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java