观察者模式

来源:互联网 发布:中美网络马云百度 编辑:程序博客网 时间:2024/06/07 12:12
1 观察操作
public interface Observer
{
    
void update();
}

 

2 具体观察者操作

public class ConcreteObserver implements Observer
{
    
public void update()
   
{
        System.out.println(
"I am notified");
    }

}

 

3 主题抽象

import java.util.Vector;
import java.util.Enumeration;

abstract public class Subject 
{
    
private Vector observersVector = new java.util.Vector();
    
public void attach(Observer observer)
  
{
        observersVector.addElement(observer);
        System.out.println(
"Attached an observer.");
    }

    
public void detach(Observer observer)
   
{
        observersVector.removeElement(observer);
    }

    
public void notifyObservers()
  
{
        java.util.Enumeration enumeration 
= observers();
        
while (enumeration.hasMoreElements())
      
{
            System.out.println(
"Before notifying");
            ((Observer)enumeration.nextElement()).update();
       }

    }

    
public Enumeration observers()
  
{
        
return ((java.util.Vector) observersVector.clone()).elements();
    }

}

 

4 具体主题操作

public class ConcreteSubject extends Subject
{
    
private String state;
    
public void change(String newState)
   
{
        state 
= newState;
        
this.notifyObservers();
   }
}

 

5 客户端实现,主题改变通知后各具体观察者进行更新。

public class Client
{
    
private static ConcreteSubject subject;
    
private static Observer observer;
    
private static Observer ob;
    
    
public static void main(String[] args)
   
{
    subject 
= new ConcreteSubject();

        observer 
= new ConcreteObserver();
        ob 
= new ConcreteObserver();

        subject.attach(observer);
        subject.attach(ob);

        subject.change(
"new state");
    }

}

 

运行结果:

init:
deps-jar:
Compiling 1 source file to D:/test/desPatten/build/classes
compile-single:
run-single:
Attached an observer.
Attached an observer.
Before notifying
I am notified
Before notifying
I am notified

生成成功(总时间:1 秒)

原创粉丝点击