欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

观察者模式

程序员文章站 2022-07-12 20:37:04
...

观察者模式

    观察者模式是一种常见的设计模式,当一个对象的行为依赖另一个对象的状态时,观察者模式就显得非常有用。观察者模式可以使用单线程,是某一个对象,及时得知自身所依赖者的状态的变化。

 

    经典的观察者模式的一般实现如下:

    1.主题接口:

package com.zendly.mode.observer;
/**
 * 观察者主题接口 
 * @author zendly
 */
public interface ISubject {
	void attach(IObserver o);//添加观察者
	void detach(IObserver o);//删除观察者
	void inform();//通知所有观察者
}

 

    2.观察者接口:

package com.zendly.mode.observer;

import java.awt.Event;

/**
 * 观察者接口,核心逻辑处理方法
 * @author zendly
 */
public interface IObserver {
	void update(Event event);
}

 

    3.主题接口的实现:

package com.zendly.mode.observer;

import java.awt.Event;
import java.util.Vector;
/**
 * 具体的主题接口的实现
 * 这里我们通常使用一个Vector来维护观察者堆列
 * @author zendly
 */
public class DetailSubject implements ISubject{
	Vector<IObserver> os = new Vector<IObserver>();
	
	@Override
	public void attach(IObserver o) {
		os.addElement(o);
	}

	@Override
	public void detach(IObserver o) {
		os.removeElement(o);
	}

	@Override
	public void inform() {
		Event e = new Event(new Object(), 1, new Object());
		/*这里通知所有观察者*/
		for (IObserver o : os) {
			o.update(e);
		}
	}

}

 

    4.具体观察者实现观察者接口:

package com.zendly.mode.observer;

import java.awt.Event;
/**
 * 具体观察者的实现,这里在接收到依赖对象的通知的时候,
 * 去执行实际要处理的逻辑
 * @author zendly
 */
public class DetailObserver implements IObserver{
	@Override
	public void update(Event event) {
		System.out.println("if received msg ,do it");
	}

}

 

    由于观察者模式是如此的常见和实用,故JDK内部已经为开发者准备一套观察者模式对象,包括:java.util.Observable类和java.util.Observer接口,开发者可以实现它们完成自己的观察者模式的逻辑。