# Class Observable

java.lang.Object
java.util.Observable

Direct Known Subclasses:
  `AsyncResource`

public class Observable extends Object
Observable is used to notify a group of Observer objects when a change occurs. On creation, the set of observers is empty. After a change occurred, the application can call the `notifyObservers()` method. This will cause the invocation of the `update()` method of all registered Observers. The order of invocation is not specified. This implementation will call the Observers in the order they registered. Subclasses are completely free in what order they call the update methods.

See Also:
  - `Observer`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Observable()`
  Constructs a new `Observable` object.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addObserver(Observer observer)`
  Adds the specified observer to the list of observers.
  `protected void`
  `clearChanged()`
  Clears the changed flag for this `Observable`.
  `int`
  `countObservers()`
  Returns the number of observers registered to this `Observable`.
  `void`
  `deleteObserver(Observer observer)`
  Removes the specified observer from the list of observers.
  `void`
  `deleteObservers()`
  Removes all observers from the list of observers.
  `boolean`
  `hasChanged()`
  Returns the changed flag for this `Observable`.
  `void`
  `notifyObservers()`
  If `hasChanged()` returns `true`, calls the `update()` method for every observer in the list of observers using null as the argument.
  `void`
  `notifyObservers(Object data)`
  If `hasChanged()` returns `true`, calls the `update()` method for every Observer in the list of observers using the specified argument.
  `protected void`
  `setChanged()`
  Sets the changed flag for this `Observable`.

  ### Methods inherited from class Object

  `clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### Observable

    public Observable()
    Constructs a new `Observable` object.

- ## Method Details

  - ### addObserver

    public void addObserver(Observer observer)
    Adds the specified observer to the list of observers. If it is already registered, it is not added a second time.
    Parameters:
      `observer` - the Observer to add.

  - ### clearChanged

    protected void clearChanged()
    Clears the changed flag for this `Observable`. After calling `clearChanged()`, `hasChanged()` will return `false`.

  - ### countObservers

    public int countObservers()
    Returns the number of observers registered to this `Observable`.
    Returns:
      the number of observers.

  - ### deleteObserver

    public void deleteObserver(Observer observer)
    Removes the specified observer from the list of observers. Passing null won't do anything.
    Parameters:
      `observer` - the observer to remove.

  - ### deleteObservers

    public void deleteObservers()
    Removes all observers from the list of observers.

  - ### hasChanged

    public boolean hasChanged()
    Returns the changed flag for this `Observable`.
    Returns:
      `true` when the changed flag for this `Observable` is set, `false` otherwise.

  - ### notifyObservers

    public void notifyObservers()
    If `hasChanged()` returns `true`, calls the `update()` method for every observer in the list of observers using null as the argument. Afterwards, calls `clearChanged()`.

    Equivalent to calling `notifyObservers(null)`.

  - ### notifyObservers

    public void notifyObservers(Object data)
    If `hasChanged()` returns `true`, calls the `update()` method for every Observer in the list of observers using the specified argument. Afterwards calls `clearChanged()`.
    Parameters:
      `data` - the argument passed to `update()`.

  - ### setChanged

    protected void setChanged()
    Sets the changed flag for this `Observable`. After calling `setChanged()`, `hasChanged()` will return `true`.