Intent:
"Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically."
Use case:
While any customer enter into system :
* send a welcome email
* verify the customer's address.
UML Diagram:
Observer: 观察者模式
Code:
package com.jim.observer; import java.util.Enumeration; import java.util.Vector; class Customer { static private Vector<Observer> myObs; static { myObs = new Vector<Observer>(); //ObserverCellection } private String id; public String getId() { return id; } public Customer(String id) { this.id = id; } public static void reg(Observer o) { myObs.addElement(o); } public static void unreg(Observer o) { myObs.remove(o); } //notify all observers public void notifyObs() { for (Enumeration<Observer> e = myObs.elements(); e.hasMoreElements();) { ((Observer) e.nextElement()).update(this); } } } abstract class Observer { public Observer() { Customer.reg(this); //register observer } abstract public void update(Customer myCust); } class WelcomeLetter extends Observer { public WelcomeLetter() { super(); } public void update(Customer myCust) { System.out.println("has sent welcome email to " + myCust.getId()); } } class AddrVerify extends Observer { public AddrVerify() { super(); } public void update(Customer myCust) { System.out.println("has verifed address of " + myCust.getId()); } } public class ObTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Customer cust1 = new Customer("cust1"); Customer cust2 = new Customer("cust2"); Observer wel = new WelcomeLetter(); Observer add = new AddrVerify(); cust1.notifyObs(); cust2.notifyObs(); } }

Output:
has sent welcome email to cust1
has verifed address of cust1
has sent welcome email to cust2
has verifed address of cust2

相关文章: