观察者模式
UML图:
下面代码,设计一个主角,当主角移动时,怪物攻击主角,陷阱困住主角,宝箱给主角加血
基本对象类
//观察者
public interface Observer { public void update(); }
//被观察者
abstract public class Subject { //观察者列表 private List<Observer> observerList = new ArrayList<Observer>(); //添加观察者 public void attachObserver(Observer observer) { observerList.add(observer); } //删除观察者 public void detachObserver(Observer observer){ observerList.remove(observer); } //通知观察者 public void notifyObservers(){ for (Observer observer: observerList){ observer.update(); } } }
实体类
//怪物 public class Monster implements Observer{ @Override public void update() { System.out.println("怪物 对主角攻击!"); } }
//陷阱 public class Trap implements Observer{ @Override public void update() { System.out.println("陷阱 困住主角!"); } }
//宝箱 public class Treasure implements Observer{ @Override public void update() { System.out.println("宝物 为主角加血!"); } }
//主角 public class Hero extends Subject{ void move(){ System.out.println("主角移动移动"); notifyObservers(); } }
main方法
public class MainTest { public static void main(String[] args) { //初始化对象 Hero hero = new Hero(); Monster monster = new Monster(); Trap trap = new Trap(); Treasure treasure = new Treasure(); //注册观察者 hero.attachObserver(monster); hero.attachObserver(trap); hero.attachObserver(treasure); //移动事件 hero.move(); } }
结果如下
主角移动移动 怪物 对主角攻击! 陷阱 困住主角! 宝物 为主角加血!