觀察者模式html
咱們先來解釋一下觀察者模式中的幾個角色名稱:設計模式
觀察者模式的通用代碼以下:併發
public abstract class Observer { public abstract void update(); } public class Subject { private Vector<Observer> observers = new Vector<Observer>(); public void addObserver(Observer o){ observers.add(o); } public void delObserver(Observer o){ if(observers.remove(o)) System.out.println("the observer is removed"); } public void notifyObservers(){ for(Observer o : observers){ o.update(); } } } public class ConcreteObserver extends Observer{ @Override public void update() { // TODO Auto-generated method stub System.out.println("接收消息並進行處理"); /** * 本身的業務邏輯 */ } } public class ConCreteSubject extends Subject{ public void doSomething(){ /** * 本身的業務邏輯 */ super.notifyObservers(); } }
觀察者模式的優缺點 |
觀察者模式的擴展 |
public class HanFeiZi extends Observable implements IHanFeiZi{ @Override public void haveBreakfast() { // TODO Auto-generated method stub super.setChanged(); super.notifyObservers("韓非子在吃飯"); } @Override public void haveFun() { // TODO Auto-generated method stub super.setChanged(); super.notifyObservers("韓非子在娛樂"); } } public class Lisi implements Observer{ @Override public void update(Observable o, Object arg) { // TODO Auto-generated method stub System.out.println("觀察者接收消息處理"); } } public class Client { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Lisi lisi = new Lisi(); HanFeiZi hanfeizi = new HanFeiZi(); hanfeizi.addObserver(lisi); hanfeizi.haveBreakfast(); } }