监听器, 接口, 处理程序。
它们听起来很相似,但它们必须不同。
也许在objective-c中'委托'。
答案 0 :(得分:6)
<强>接口强>
interface
用于提供角色。根据设计模式,当某些不断变化的行为必须封装在 interface
或abstract class
中时。
<强>例如强>
假设有paint class
,其方法为paintIt()
。
现在方法paintIt()
可以是自由的,着色等,所以这种不断变化的行为。因此,我们需要将其封装在 interface
或abstract class
中。
<强>监听器:强>
Listeners
是侦听某些操作的接口,它们包含回调方法,该方法具有在特定操作完成时要触发的逻辑。
<强>处理程序:强>
android中的 Handlers
用于将数据从非UI线程发布到UI线程。
答案 1 :(得分:1)
监听器在点网中几乎是类似的委托,可能是客观的C.它的主要用途是在执行某个动作或事件时保持回调方法。 在dotnet的情况下,我们将方法本身作为回调传递给委托(可能在Objective C中,情况也是如此。),但在java中,没有像委托一样的概念。所以它使用接口来做同样的技巧。
例如,如果我们需要分配一个按钮点击一个方法,在dotnet中,可能在目标C中,我们将把该函数指针传递给相应的点击代理。在Java中,我们要做的是创建一个这样的接口:
public interface ButtonClickListener{
void onClick();
}
然后在Button类中,而不是委托,我们将创建一个函数来接受这个监听器:
public void setOnClickListener(ButtonClickListener listener){
mButtonClickListener=listener;
}
我们将使用setOnClickListener
实现的类的对象在我们的类中调用此ButtonClickListener
方法。
然后每当按钮点击发生时,Button类的作用是:
mButtonClickListener.onClick();
这将调用ButtonClickListener
Implemented类的onClick,我们可以在那里执行所需的操作。
处理程序与此无关。这是一个Android框架提供的类,用于在我们使用其他自定义线程时与UI线程同步操作。
希望你明白了!。
答案 2 :(得分:1)
这很棘手,因为有很多重叠,特别是指Objective-C。
这是我的最大努力:
监听器是一种接口。
查看http://developer.android.com/guide/topics/ui/ui-events.html#EventListeners
根据该页面,“事件”监听器的独特之处在于它是一个单一的回调接口。该页面特定于视图,但是监听器当然可以应用于任何其他类型的事件。
android.os.Handler的android页面是: http://developer.android.com/reference/android/os/Handler.html
如果您非常专注于差异,或许将处理程序更多地用于双重目的概念是合理的。处理程序包括发送消息/事件,并在稍后接收它。
棒球?
在场上的球员是球的倾听者。
玩家手上的手套(弱类比)就是界面。
一个玩家把球扔到空中给自己带来乐趣并抓住它是一个处理程序
:)
在Objective-C中: 接口的使用大致相同,但名称不同:@protocol
Android / Java的Objective-C监听器以多种方式实现,比如java / android中的监听器。我所说的最好的Obj-C对应方是通知(NSNotification和NSNotificationCenter)。这可能是有争议的。当然,有各种各样的代码编码方式和各种模式。 android中的Handler可以等同于在Obj-C消息中作为参数传递的块,或者委托也适合。