Use standard ChangeListener interface type public interface ChangeListener
{
void stateChanged(ChangeEvent event);
}
Invoice collects ArrayList of change listeners
When the invoice changes, it notifies all listeners: ChangeEvent event = new ChangeEvent(this);
for (ChangeListener listener : listeners)
listener.stateChanged(event);