我正在閱讀SOLID's Open/Closed Principle今天,我記得的第一個(gè)例子是Android支持庫中的ViewDragHelper類。以下是班級(jí)詳情:// 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. 其實(shí)好像是這樣。有Context(ViewDragHelper類)和Strategy抽象(Callback類)。但是有兩點(diǎn):該策略的具體實(shí)施委托給圖書館的最終用戶。策略實(shí)現(xiàn)的行為會(huì)影響Context(您可以在tryCaptureView方法中鉗制視圖位置或禁止拖動(dòng)操作),而在Strategy pattern描述中Strategy似乎不會(huì)對(duì)Context(即僅產(chǎn)生或消耗一些數(shù)據(jù))產(chǎn)生任何影響。這是一個(gè)Strategy或其他一些模式還是只是這樣一個(gè)常見概念的實(shí)現(xiàn)Callback?
1 回答

郎朗坤
TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
這是一個(gè)
Strategy
或其他一些模式還是只是這樣一個(gè)常見概念的實(shí)現(xiàn)Callback
?
不,它不是經(jīng)典定義中的Strategy Pattern ,而是 Strategy 和Observer Pattern兩者的組合。ViewDragHelper
的具有行為改變Callback
S'getViewHorizontalDragRange()
與clampViewPositionHorizontal()
實(shí)現(xiàn)(策略模式)。并通過和實(shí)現(xiàn)(觀察者模式)ViewDragHelper
通知 aCallback
的實(shí)例有關(guān)ViewDragHelper
的當(dāng)前狀態(tài)。onViewPositionChanged()
tryCaptureView()
添加回答
舉報(bào)
0/150
提交
取消