首先写观察者抽象类
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();
}
}