观察者模式-学习札记
观察者模式-学习笔记
设计模式中 观察者模式在java中已经实现,只需继承Observable类,然后实现Observer接口即可。
设计模式学习最重要是先明白应用场景,然后再将模式引用进来即可事半功倍!
涉及实际场景:
如某SNS网站都有相册模块,对相册的评论及赞也是很多网站都会加入的功能。
评论者看到一个美女图片,觉得不错,赞一个!
在赞的同时:
1.我们有一个计数功能,来统计每一个相片的赞数量;
2.我们给美女一个message,告诉她有多了一个倾慕者;
此时即可用到观察者模式。
不废话,上源码:
运行结果如下:
设计模式中 观察者模式在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哦!