分析

  1. 创建观察者接口Observer
  2. 创建被观察者接口ToBeObserver
  3. 创建观察者observerImpl实现类
  4. 创建被观察者ToBeObserverImpl实现类
  5. 创建测试类ObserverTest
  6. 具体细节看代码注解

实现

测试效果

包名和类名

代码

观察者接口

package observer;
/*
 * 观察者
 */
public interface observer {
	
	public void handleNotify(String message);
}

被观察者接口

package observer;
/*
 * 被观察者
 */
public interface ToBeObserver {
	/*
	 * 添加观察者
	 */
	public void addObserver(observer observer);
	/*
	 * 删除观察者
	 */
	public void remoreObserver(observer observer);
	/*
	 * 通知观察者
	 */
	public void notifyObserver(String message);
}

观察者实现类

package observer.impl;

import observer.observer;
/*
 * 美女观众
 */
public class Observer1 implements observer {

	@Override
	public void handleNotify(String message) {
		System.out.println("美女正在偷看!");

	}

}
package observer.impl;

import observer.observer;
/*
 * 帅哥观众
 */
public class Observer2 implements observer {

	@Override
	public void handleNotify(String message) {
		System.out.println("帅哥路过,停下来看了看!");
	}

}

被观察者实现类

package observer.impl;

import java.util.ArrayList;
import java.util.List;

import observer.ToBeObserver;
import observer.observer;

public class SuperStar implements ToBeObserver{
	/*
	 * 把观察者放入List集合中
	 */
	List<observer> observers;
	
	public SuperStar() {
		observers=new ArrayList<observer>();//初始化list
	}
	@Override
	public void addObserver(observer observer) {//向集合中添加观察者
		observers.add(observer);	
	}
	@Override
	public void remoreObserver(observer observer) {//向集合中删除观察者
		observers.remove(observer);	
	}
	@Override
	public void notifyObserver(String message) {//遍历,通知观察者
		for(observer o : observers) {
			o.handleNotify(message);
		}	
	}
}

测试类

package observer.impl;

import observer.ToBeObserver;
import observer.observer;

public class ObserverTest {
	/*
	 * 测试类
	 */
	public static void main(String[] args) {
		//定义一个被观察者
		ToBeObserver SuperStar=new SuperStar();
		//定义两个不同的观察者
		observer o1=new Observer1();
		observer o2=new Observer2();
		//被观察者同意添加两个不同的观察者
		SuperStar.addObserver(o1);
		SuperStar.addObserver(o2);
		//被观察者通知所有观察者
		SuperStar.notifyObserver("巨星开始唱歌...");		
		System.out.println("=========================");
		//被观察者移除一位观察者
		SuperStar.remoreObserver(o2);
		SuperStar.notifyObserver("巨星台上发奖品");
	}

}