/**
* Provides classes which make it easier to add and remove listeners from observable instances.
* <p>
* Using the default JavaFX 8 features, it is necessary to store both the observed instance and the listener if the
* latter has to be added or removed repeatedly. A {@link org.codefx.libfx.listener.handle.ListenerHandle
* ListenerHandle} encapsulates those references and the state whether a listener is currently added or not. It provides
* an {@link org.codefx.libfx.listener.handle.ListenerHandle#attach() attach()} and a
* {@link org.codefx.libfx.listener.handle.ListenerHandle#detach() detach} method which add or remove the listener.
* Redundant calls (i.e. attaching when the listener is already added) are no-ops.
* <p>
* All features of <b>LibFX</b> which deal with listeners are aware of {@code ListenerHandle}s and respective methods
* will return them. For observable classes included in the JDK, the factory
* {@link org.codefx.libfx.listener.handle.ListenerHandles ListenerHandles} provides methods to easily create a handle.
*
* @see org.codefx.libfx.listener.handle.ListenerHandle ListenerHandle
* @see org.codefx.libfx.listener.handle.ListenerHandles ListenerHandles
*/
package org.codefx.libfx.listener.handle;