All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.dihedron.patterns.observer.impl.SynchronousObservable Maven / Gradle / Ivy

Go to download

Base set of functionalities, including simple utility classes and more complex patterns.

The newest version!
/**
 * 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