代表团模式的目的是什么?

我正在通过Android的SensorManager的源代码进行查看,发现注册SensorEventListenerSensorManager将监听ListenerDelegate控件传递给ListenerDelegate

我只举这个例子。 我读了关于委托编程的维基百科文章 ,但我仍然不确定它的目的。 为什么会使用“委托”? 它如何帮助程序的控制stream程? 使用(或不使用)的缺点是什么? 与听众一起使用最实用吗?

编辑: ListenerDelegate在487行,有问题的方法是在1054行。

授权并不完全是GoF书中使用的“devise模式”。 它在很多情况下是有用的,并且是其他模式的基础

  • 当你想在委托之前/之后执行一些额外的动作(这是装饰者模式,但它是基于委派)。 例如, Collections.synchronizedList(..)创build了一个新的集合,该集合委托给原来的集合,但其方法同步。
  • 当你有不兼容的接口,你想适应另一个(适配器模式)。 您从符合所需接口的方法中获取原始对象并委托给它。 例如,有EnumerationIterator类,它使EnumerationIterator适应Iterator接口。 该类有一个hasNext()方法,委托给enumeration.hasMoreElements()
  • 当你想隐藏你的类的用户的一些复杂性,你可以有委托给不同的实际工作人员的方法。 例如,一辆Car可以有start()openWindow()brake() ,但是这些方法中的每一个都会实际上委托给引擎,el.windows和制动系统( 参见这个 )

根据有效的爪哇(由约书亚布洛赫),组成有利于inheritance。 与inheritance相比,构成有几个优点。 直觉之一如下:考虑一个从基类inheritance的子类。 因此,基类中的任何更改都将使子类变得脆弱,因为子类依赖于基类。 通过使用inheritance,我们在子类上绑定依赖于基类,这使得我们的代码变得脆弱。 但是通过使用组合,我们可以消除这个限制。 通过在类之间build立一个“有一个关系”来完成构造,而不是像inheritance一样是“一个”关系。 “委托模式”和“装饰模式”都是如何实现组合的例子。 您可能想阅读有效的Java书中的“组合vsinheritance”一章,因为它是相当丰富的。

对于简短的解释,你可以参考这篇文章: http : //javarevisited.blogspot.com/2013/06/why-favor-composition-over-inheritance-java-oops-design.html

委托模式用于让其他人真正完成工作,例如,在您的示例中, SensorManager不会知道如何去做每个听众想要的内容,但是您只需要一个程序监听传感器。

因此,通过在SensorManager上调用registerListener创build侦听器,并且这些侦听器将传递信息,然后可以决定如何处理来自传感器的数据。