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