是OnClickListener在android中策略模式的例子?在另一个 Stackoverflow 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
类没有监听器(观察者)列表,但只能有一个监听器。 - 它将方法的一部分委托(delegate)给其实例成员:一次监听器。
OnClickListener
类似于用户代码实现单击按钮后调用的策略(方法)的策略。OnClickListener
的不同实现可以在运行时传递给Button
对象,并且可以在运行时更改行为。 (单击同一按钮时可能会显示一个弹出窗口,其中包含OnClickListener
的一种实现,并且如果传递了OnClickListener
的另一种实现,则可能会向服务器发送请求。)
最佳答案
这是第 293 页的观察者模式的 Intent 。
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
严格来说,代码示例并不是一个观察者,因为一对多的关系更像是一对一的关系。然而,根据第 315 页的 Intent ,我也不会将其称为策略。
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
,因此其行为更像监听器。
出于这个原因,我将代码示例称为观察者模式的退化形式。在我看来,这就像观察家的一次尝试,但并不完全符合资格。我不会通过将这种尝试与另一种模式联系起来来荣耀它。
关于java - 使用 OnClickListener() 是策略模式的示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54855594/