观察者模式

来源:互联网 发布:传奇盛世翅膀升级数据 编辑:程序博客网 时间:2024/04/25 02:01

 

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 
{

    
/**
     * @associates <{Observer}>
     * 
@link aggregation
     * @supplierCardinality 0..*
     
*/

    
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 秒)

原创粉丝点击