观察者模式-学习笔记

设计模式中 观察者模式在java中已经实现,只需继承Observable类,然后实现Observer接口即可。
设计模式学习最重要是先明白应用场景,然后再将模式引用进来即可事半功倍!

涉及实际场景:

如某SNS网站都有相册模块,对相册的评论及赞也是很多网站都会加入的功能。
评论者看到一个美女图片,觉得不错,赞一个!
在赞的同时:
1.我们有一个计数功能,来统计每一个相片的赞数量;
2.我们给美女一个message,告诉她有多了一个倾慕者;
此时即可用到观察者模式。

不废话,上源码:



import java.util.Observable;
/**
 * 观察者模式
 * @author  
 *
 */

public class CommendThePicture extends Observable{
	//相片ID
	int picId;
	//讯息
	String message;
	public CommendThePicture(){
	}
	//赞美女图片
	public void  toCommendPic(int picId){
		System.out.println("赞美女的照片:");
		setChanged();
		notifyObservers(picId);
	}
	//传送MESSAGE
	public void  toSendMessage(String message){
		System.out.println("message如下:");
		setChanged();
		notifyObservers(message);
	}
	 
	public int getPicId() {
		return picId;
	}

	public void setPicId(int picId) {
		this.picId = picId;
	}
	
	
}





import java.util.Observable;
import java.util.Observer;
/**
 * 计数
 * @author  
 *
 */
public class CountObserver implements Observer{

	@Override
	public void update(Observable o, Object arg) {
		if(arg instanceof Integer){
			commendNumDao((Integer)arg);
		}
	}
	//调用数据层获取统计数据
	public void commendNumDao(int picId){
		System.out.println("ID="+picId+"的美女照片现在一共有222个人流口水!");
	}

}



import java.util.Observable;
import java.util.Observer;
/**
 * message
 * @author  
 *
 */
public class MessageObserver implements Observer{

	@Override
	public void update(Observable o, Object arg) {
		 if(arg instanceof String){
			 sayToGirl((String)arg);
		 }
		
	}
	
	public void sayToGirl(String message){
		System.out.println("对MM表白:"+message);
	}

}

/**
 * test
 * @author  
 *
 */
public class Test {
	public static void main(String[] argv){
		CommendThePicture c = new CommendThePicture();
		//相片ID
		int picId = 1200;
		String message  = "好漂亮的MM哦!";
		c.addObserver(new CountObserver());
		c.addObserver(new MessageObserver());
		c.toCommendPic(picId);
		c.toSendMessage(message);
	}
}



运行结果如下:
赞美女的照片:
ID=1200的美女照片现在一共有222个人流口水!
message如下:
对MM表白:好漂亮的MM哦!

猜你喜欢

转载自seven27.iteye.com/blog/1447278