gpt4 book ai didi

java - 使用 OnClickListener() 是策略模式的一个例子吗?

转载 作者:搜寻专家 更新时间:2023-11-01 09:21:27 25 4
gpt4 key购买 nike

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;
}
}

我相信它的策略模式而不是观察者模式的理由:

  1. 这里我们看到 Button 类没有监听器列表(观察者),但只能有一个监听器。
  2. 它将方法的一部分委托(delegate)给它的实例成员:一次是一个监听器。
  3. OnClickListener 类似于一种策略,其中用户代码实现一种策略(方法),一旦单击按钮就会被调用。
  4. 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com