1.观察者模式

两个接口,一个主题接口(一般包含了注册观察者,删除观察者,发布三个方法),一个观察者接口(一般只要有一个update,但发布消息时给主题调用).

1.观察者接口

public interface MyObserver {
	
	public void update(String name);
}

2.主题发布者接口

public interface MySubject {
	public void addObserver(MyObserver o);
	public void removeObserver(MyObserver o);
	public void notifyAllObserver();
}

3.观察者实现

public class MyObserver1  implements MyObserver{
	private MySubject subject;
	public MyObserver1(MySubject subject){
		this.subject=subject;
		this.subject.addObserver(this);
		
	}
	public void update(String name) {
		// TODO Auto-generated method stub
		System.out.println("订阅者"+this+"收到"+name);
	}

}

4.主题发布者实现

public class MySubjectImpl implements MySubject {
	private ArrayList observers;
	public MySubjectImpl(){
		observers=new ArrayList();
	}
	public void addObserver(MyObserver o) {
		// TODO Auto-generated method stub
		observers.add(o);
		
	}

	public void removeObserver(MyObserver o) {
		// TODO Auto-generated method stub
		int i = observers.indexOf(o);
		if(i>0){
			observers.remove(i);
		}
	}

	public void notifyAllObserver() {
		// TODO Auto-generated method stub
		for(int i= 0;i<observers.size();i++){
			MyObserver observer = (MyObserver)observers.get(i);
			observer.update("发布者"+this+"发布的消息");
			
		}
	}
	
	

}

5.整合测试,兄弟

public class ObserverSubject {
	public static void main(String[] args) {
		MySubjectImpl subject=new MySubjectImpl();
		MyObserver1 observer=new MyObserver1(subject);
		MyObserver1 observer1=new MyObserver1(subject);
		subject.notifyAllObserver();
	}
}

结果应该是这样的,他们都收到了消息.

 

posted @ 2017-08-25 17:47  Kyhoon  阅读(216)  评论(0编辑  收藏  举报