
org.dihedron.patterns.observer.impl.SynchronousObservable Maven / Gradle / Ivy
/**
* Copyright (c) 2012-2014, Andrea Funto'. All rights reserved. See LICENSE for details.
*/
package org.dihedron.patterns.observer.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.dihedron.core.License;
import org.dihedron.patterns.observer.Observable;
import org.dihedron.patterns.observer.Observer;
/**
* A class implementing the simple, synchronous observer pattern.
*
* @author Andrea Funto'
*/
@License
public class SynchronousObservable implements Observable {
/**
* The list of registered observers.
*/
private List> observers = Collections.synchronizedList(new ArrayList>());
/**
* @see org.dihedron.patterns.observer.Observable#addObserver(org.dihedron.patterns.observer.Observer)
*/
@Override
public Observable addObserver(Observer observer) {
if(observer != null) {
observers.add(observer);
}
return this;
}
/**
* @see org.dihedron.patterns.observer.Observable#removeObserver(org.dihedron.patterns.observer.Observer)
*/
@Override
public Observable removeObserver(Observer observer) {
if(observer != null) {
List> pruned = Collections.synchronizedList(new ArrayList>());
synchronized(observers) {
for(Observer o : observers) {
if(o != observer) {
pruned.add(o);
}
}
observers = pruned;
}
}
return this;
}
/**
* @see org.dihedron.patterns.observer.Observable#removeAllObservers()
*/
@Override
public Observable removeAllObservers() {
observers.clear();
return this;
}
/**
* @see org.dihedron.patterns.observer.Observable#fire(java.lang.Object, java.lang.Object[])
*/
@Override
public void fire(E event, Object... args) {
for(Observer observer : observers) {
observer.onEvent(this, event, args);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy