设计模式 观察者模式2

首先写观察者抽象类


public abstract class Observer {
	protected String name;
	protected Secretary sub;

	public Observer(String name,Secretary sub)
	{
		this.name=name;
		this.sub=sub;
	}
	
	public abstract void Update();
}

再写两个观察者继承它


public class NBAObserver extends Observer{

	public NBAObserver(String name, Secretary sub) {
		super(name, sub);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void Update() {
		// TODO Auto-generated method stub
		System.out.println(sub.getAction()+name+"关闭NBA直播,继续工作!");
	}
	

}


public class StockObserver extends Observer{

	public StockObserver(String name, Secretary sub) {
		super(name, sub);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void Update() {
		// TODO Auto-generated method stub
		System.out.println(sub.getAction()+"!!!"+name+"关闭股票行情,继续工作");
		
	}

}

在写秘书类

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

public class Secretary {

	private List<Observer> observers=new ArrayList<Observer>();
	
	private String action;
	
	public String getAction() {
		return action;
	}

	public void setAction(String action) {
		this.action = action;
	}

	public void Attach(Observer observer)
	{
		observers.add(observer);
	}
	
	public void Detach(Observer observer)
	{
		observers.remove(observer);
	}
	
	public void Notify()
	{
		for (Observer observer : observers) {
			observer.Update();
		}
	}
	
	
}

最后写测试类


public class Program {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Secretary secretary=new Secretary();
		StockObserver worker1 = new StockObserver("施于任", secretary);
		StockObserver worker2 = new StockObserver("魏国冲", secretary);
		
		//登记着两位工友
		secretary.Attach(worker1);
		secretary.Attach(worker2);
		
		//发现老板回来
		secretary.setAction("老板回来了");
		
		//通知两个同事
		secretary.Notify();
	}

}

原文地址:https://www.cnblogs.com/yufenghou/p/6035438.html