珠宝商运送一批钻石,有黄金强盗准备抢劫,珠宝商雇佣了私人保镖,警察局也派人护送,于是当运输车上路的时候,强盗保镖警察都要观察运输车一举一动
//抽象的观察者
public interface Watcher {
public void update();
}
//保安
public class Security implements Watcher{
@Override
public void update() {
System.out.println("运输车有行动,保安贴身保护");
}
}
//土匪
public class Thief implements Watcher{
@Override
public void update() {
System.out.println("运输车有行动,强盗准备动手");
}
}
//警察
public class Police implements Watcher{
@Override
public void update() {
System.out.println("运输车有行动,警察护航");
}
}
//抽象的被观察者,在其中声明方法(添加、移除观察者,通知观察者)
public interface Watched {
public void addWatcher(Watcher watcher);
public void removeWatcher(Watcher watcher);
public void notifyWatchers();
}
//具体的被观察者
public class Transporter implements Watched{
private List<Watcher> list = new ArrayList<Watcher>();
@Override
public void addWatcher(Watcher watcher)
{
list.add(watcher);
}
@Override
public void removeWatcher(Watcher watcher)
{
list.remove(watcher);
}
@Override
public void notifyWatchers() {
for (Watcher watcher : list)
{
watcher.update();
}
}
}
public class Test {
public static void main(String[] args)
{
Transporter transporter = new Transporter();
Police police = new Police();
Security security = new Security();
Thief thief = new Thief();
transporter.addWatcher(police);
transporter.addWatcher(security);
transporter.addWatcher(security);
transporter.notifyWatchers();
}
}