《Head First设计模式》 - 观察者模式

观察者模式使用非常广泛,在《head first设计模式》中放在第一位,该模式必须掌握。
该模式又叫发布/订阅模式;将观察者和被观察者分离。
<span style="font-family: Arial, Helvetica, sans-serif;">package observe;</span>
/**
 * 被观察者接口
 * 
 * @author ZHEN.L
 * @date 2016.04.12
 * 
 */
public interface Observable {

	void addObserve(Observe o);

	void removeObserve(Observe o);

	void notifyObserve();

}
 
 
 
 
package observe;

import java.util.ArrayList;
import java.util.List;

/**
 * 被观察者实现
 * 
 * @author zhen.l
 * @date 2016.04.12
 * 
 */
public class NewsObservale implements Observable {

	private String w;
	private String h;
	private List<Observe> observes = new ArrayList<Observe>();

	public void addObserve(Observe o) {
		observes.add(o);
	}

	public void removeObserve(Observe o) {
		observes.remove(o);
	}

	public void notifyObserve() {
		for (Observe o : observes) {
			o.update(w, h);
		}
	}

	public String getW() {
		return w;
	}

	public void setW(String w) {
		this.w = w;
	}

	public String getH() {
		return h;
	}

	public void setH(String h) {
		this.h = h;
	}

	public static void main(String[] args) {
		NewsObservale no = new NewsObservale();
		W w = new W();
		H h = new H();
		no.addObserve(w);
		no.addObserve(h);
		no.setH("1");
		no.setW("2");
		no.notifyObserve();
		System.out.println(" ---------  ");
		no.removeObserve(h);
		no.notifyObserve();
	}
}
package observe;

/**
 * 观察者接口
 * 
 * @author ZHEN.L
 * @date 2016.04.12
 * 
 */
public interface Observe {

	void update(String w, String h);

}
package observe;

/**
 * 具体观察者
 * 
 * @author HXZQ-SW
 * 
 */
public class W implements Observe {

	public void update(String w, String h) {
		System.out.println("2.w=" + w + " , h=" + h);
	}
}

package observe;

/**
 * 具体观察者
 * 
 * @author ZHEN.L
 * @DATE 2016.04.12
 * 
 */
public class H implements Observe {

	public void update(String w, String h) {
		System.out.println("1.w = " + w + " , h=" + h);
	}
}




你可能感兴趣的:(《Head First设计模式》 - 观察者模式)