观察者模式--消息服务

观察者模式就是被观察者的举动被监视,当A中的数据发生变化时,观察者需要知道.----消息服务

观察者模式是基于面向接口编程, 想要成为观察者就要实现观察者接口.观察者接口中拥有窃听方法

想要称为观察者只继承一下观察者接口还不行,还需要去注册,打入卧底到被观察者的观察者池中.


代码演示:

A是被观察者,B,C都想观察A举动,具体代码实现如下:

观察者模式--消息服务_第1张图片


观察者接口:Observer:

package com.qx.observer;

public interface Observer {
	void qieting(String s);
}

被观察者: A:

package com.qx.observer;

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

/**
 * 被观察者,当A中的数据发生变化的时候,观察者需要知道
 * @author dell
 *
 */
/*被观察者*/
public class A {
	
	//观察者池()
	private List observers=new ArrayList<>();
	
	//注册观察者
	public void register(Observer observer){
		observers.add(observer);
	};
	
	//解除注册观察者
	public void unRegister(Observer observer){
		observers.remove(observer);
	}
	
	//A的一举一动被众多观察者监视窃听
	public void change(String data){
		System.out.println("A有了行动:"+data);
		
		for (Observer observer : observers) {
			observer.qieting(data);  //接口回调
		}
	}
}

观察者B:

package com.qx.observer;

public class B implements Observer{

	@Override
	public void qieting(String s) {
		// TODO Auto-generated method stub
		System.out.println("B中收到的数据是:"+s);
	}
}

观察者C:

package com.qx.observer;

public class C implements Observer{

	@Override
	public void qieting(String s) {
		// TODO Auto-generated method stub
		System.out.println("C中收到的数据是:"+s);
	}

}

测试类TestObserver

package com.qx.observer;

public class TestObserver {
	public static void main(String[] args) {
		A a=new A();
		B b=new B();
		C c=new C();
		
		a.register(b);
		a.register(c);
		a.change("变化后的数据xxxxxx");
		
		System.out.println("<--------------------------------->");
		
		a.unRegister(b);
		a.change("a去大街上逛了一圈");
		
	}
}

运行测试类,控制台输出结果为:

A有了行动:变化后的数据xxxxxx
B中收到的数据是:变化后的数据xxxxxx
C中收到的数据是:变化后的数据xxxxxx
<--------------------------------->
A有了行动:a去大街上逛了一圈
C中收到的数据是:a去大街上逛了一圈


可见,当 B,C都注册成为观察者的一员后,就能监视A, 当B解除注册后,就失去了监视A的资格.





你可能感兴趣的:(设计模式)