使用 OnClickListener() 是策略模式的一个例子吗?
Is using OnClickListener() an example of Strategy pattern?
是 OnClickListener in android an example of Strategy pattern ? In another Whosebug question 接受的答案说它是观察者模式。
类似的代码来理解问题。
public interface OnClickListener{
void onClick(View view);
}
public class Button extends View{
private OnClickListener listener;
void clicked(){
//some code
if(listener != null){
listener.onClick(this);
}
//some other code
}
public void setOnClickListener(OnClickListener listener){
this.listener = listener;
}
}
我相信它的策略模式而不是观察者模式的理由:
- 这里我们看到
Button
class没有listeners(Observers)但只能有一个listener。
- 它将方法的一部分委托给它的实例成员:一次监听器。
OnClickListener
类似于一种策略,其中用户代码实现一种策略(方法),一旦单击按钮就会被调用。
OnClickListener
的不同实现可以在 运行 期间传递给 Button
对象,并且可以在 运行 期间更改行为。 (单击相同的按钮可能会显示一个带有 OnClickListener
实现的弹出窗口,如果传递了 OnClickListener
的另一个实现,则可能会向服务器发送请求。)
这是第 293 页观察者模式的意图。
Define a one-to-many dependency between objects so that when one object
changes state, all its dependents are notified and updated automatically.
严格来说,代码示例不是观察者,因为一对多关系是一对一。但是,根据第 315 页的意图,我也不会将其称为策略。
Define a family of algorithms, encapsulate each one, and make them interchangeable.
Strategy lets the algorithm vary independently from clients that use it.
从语义上讲,侦听器不是算法;即响应事件与执行计算的目的不同。此目的在语法上体现在 onClick()
方法是 void
的地方,因此表现得更像一个侦听器。
因此,我将代码示例称为观察者模式的 退化 形式。在我看来,它像是一个不完全符合条件的观察者尝试。我不会通过将它与另一个模式相关联来美化这种尝试。
是 OnClickListener in android an example of Strategy pattern ? In another Whosebug question 接受的答案说它是观察者模式。
类似的代码来理解问题。
public interface OnClickListener{
void onClick(View view);
}
public class Button extends View{
private OnClickListener listener;
void clicked(){
//some code
if(listener != null){
listener.onClick(this);
}
//some other code
}
public void setOnClickListener(OnClickListener listener){
this.listener = listener;
}
}
我相信它的策略模式而不是观察者模式的理由:
- 这里我们看到
Button
class没有listeners(Observers)但只能有一个listener。 - 它将方法的一部分委托给它的实例成员:一次监听器。
OnClickListener
类似于一种策略,其中用户代码实现一种策略(方法),一旦单击按钮就会被调用。OnClickListener
的不同实现可以在 运行 期间传递给Button
对象,并且可以在 运行 期间更改行为。 (单击相同的按钮可能会显示一个带有OnClickListener
实现的弹出窗口,如果传递了OnClickListener
的另一个实现,则可能会向服务器发送请求。)
这是第 293 页观察者模式的意图。
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
严格来说,代码示例不是观察者,因为一对多关系是一对一。但是,根据第 315 页的意图,我也不会将其称为策略。
Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
从语义上讲,侦听器不是算法;即响应事件与执行计算的目的不同。此目的在语法上体现在 onClick()
方法是 void
的地方,因此表现得更像一个侦听器。
因此,我将代码示例称为观察者模式的 退化 形式。在我看来,它像是一个不完全符合条件的观察者尝试。我不会通过将它与另一个模式相关联来美化这种尝试。