观察者模式

canca canca
2007-03-26 15:05
1
0

//观察者模式
//CopyRight(C) CAnca software Office.2006
//Created by CAnca.

import java.util.*;

public class ObserverMode{
 public static void main(String[] args){

  // Configure Observer pattern
  concreteSubject s = new concreteSubject();

      s.Attach(new concreteObserver(s,"X"));
       s.Attach(new concreteObserver(s,"Y"));
       s.Attach(new concreteObserver(s,"Z"));
     
       // Change subject and notify observers 
       s.setSubjectState("ABC");
       s.DIYnotify();
 }
}

//Subject
abstract class Subject{
 private ArrayList observers = new ArrayList();
 public void Attach(Observer observer){
  this.observers.add(observer);
 }
 public void Detach(Observer observer){
  this.observers.remove(observer);
 }
 
 public void DIYnotify(){
  for(int i = 0 ; i < this.observers.size() ; i++){
   Observer observer = (Observer)observers.get(i);
   observer.Update();
  }
 }
}

//Observer
abstract class Observer{
 abstract void Update();
}

//concreteObserver
class concreteObserver extends Observer{
 private String observerState;
 private concreteSubject subject;
 private String name;
 
 public concreteObserver(concreteSubject subject,String name){
  this.name = name;
  this.subject = subject;
 }
 public void Update(){
  this.observerState = subject.getSubjectState();
  System.out.println("Observer " + name + "'s new state is " + observerState);  
 }
}

//concreteSubject
class concreteSubject extends Subject{
 private String subjectState;
 public void setSubjectState(String state){
  subjectState = state;
 }
 public String getSubjectState(){
  return subjectState;
 }
}

发表评论