java 在观察者模式中使用泛型T的实例
程序员文章站
2024-03-05 23:23:07
被观察者
public class observable {
list observers = n...
被观察者
public class observable<t> { list<observer> observers = new arraylist<observer>(); boolean changed = false; /** * adds the specified observer to the list of observers. if it is already * registered, it is not added a second time. * * @param observer * the observer to add. */ public void addobserver(observer observer) { if (observer == null) { throw new nullpointerexception("observer == null"); } synchronized (this) { if (!observers.contains(observer)) observers.add(observer); } } /** * clears the changed flag for this {@code observable}. after calling * {@code clearchanged()}, {@code haschanged()} will return {@code false}. */ protected void clearchanged() { changed = false; } /** * returns the number of observers registered to this {@code observable}. * * @return the number of observers. */ public int countobservers() { return observers.size(); } /** * removes the specified observer from the list of observers. passing null * won't do anything. * * @param observer * the observer to remove. */ public synchronized void deleteobserver(java.util.observer observer) { observers.remove(observer); } /** * removes all observers from the list of observers. */ public synchronized void deleteobservers() { observers.clear(); } /** * returns the changed flag for this {@code observable}. * * @return {@code true} when the changed flag for this {@code observable} is * set, {@code false} otherwise. */ public boolean haschanged() { return changed; } /** * if {@code haschanged()} returns {@code true}, calls the {@code update()} * method for every observer in the list of observers using null as the * argument. afterwards, calls {@code clearchanged()}. * <p> * equivalent to calling {@code notifyobservers(null)}. */ public void notifyobservers() { notifyobservers(null); } /** * if {@code haschanged()} returns {@code true}, calls the {@code update()} * method for every observer in the list of observers using the specified * argument. afterwards calls {@code clearchanged()}. * * @param data * the argument passed to {@code update()}. */ public void notifyobservers(t data) { int size = 0; observer[] arrays = null; synchronized (this) { if (haschanged()) { clearchanged(); size = observers.size(); arrays = new observer[size]; observers.toarray(arrays); } } if (arrays != null) { for (observer observer : arrays) { observer.update(this, data); } } } /** * sets the changed flag for this {@code observable}. after calling * {@code setchanged()}, {@code haschanged()} will return {@code true}. */ protected void setchanged() { changed = true; } }
观察者
public interface observer<t> { public void update(observable<t> observable, t data); }
以上这篇java 在观察者模式中使用泛型t的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
上一篇: 一个基于boost.asio实现的服务器端与客户端通信的网络协议
下一篇: 数组工具类Arrays