首先设计一个发布者类继承JDK的Observable类,接着设计多个订阅者实现JDK的Observer接口,再来一个主类调用,观察者模式的小例子就完成了,以下是代码:
发布者类:
package com.freshbin.pattern.observer.subject;
import java.util.Observable;
/**
* 发布者
* @author freshbin
* @date 2019-1-3 11:51:12
*/
public class Subjecter extends Observable {
public void groupAdminIsComing(Boolean flag) {
// System.out.println("进入groupAdminIsComing");
if(flag) {
System.out.println("群管理来了,大家注意言辞!");
} else {
System.out.println("群管理走了,大家随便浪!");
}
this.setChanged();
this.notifyObservers(flag);
// System.out.println("退出groupAdminIsComing");
}
}
订阅者类:
package com.freshbin.pattern.observer.observer;
import java.util.Observable;
import java.util.Observer;
/**
* 第一个观察者
* @author freshbin
* @date 2019-1-3 11:46:26
*/
public class FirstObserver implements Observer {
@Override
public void update(Observable o, Object arg) {
// System.out.println("进入观察者update");
Boolean flag = (Boolean)arg;
if(flag) {
pretend();
} else {
normalState();
}
// System.out.println("退出观察者update");
}
public void pretend() {
System.out.println("freshbin撤回历史消息,并且不再说话!");
}
public void normalState() {
System.out.println("freshbin话语滔滔不绝,如江河决堤!");
}
}
第二个订阅者类:
package com.freshbin.pattern.observer.observer;
import java.util.Observable;
import java.util.Observer;
/**
* 第二个观察者
* @author freshbin
* @date 2019-1-3 12:14:33
*/
public class SecondObserver implements Observer {
@Override
public void update(Observable o, Object arg) {
// System.out.println("进入观察者update");
Boolean flag = (Boolean)arg;
if(flag) {
pretend();
} else {
normalState();
}
// System.out.println("退出观察者update");
}
public void pretend() {
System.out.println("小明完全不在意群管理来没来,继续扯淡!");
}
public void normalState() {
System.out.println("小明心灰意冷,不再说话!");
}
}
主类:
package com.freshbin.pattern.observer;
import com.freshbin.pattern.observer.observer.FirstObserver;
import com.freshbin.pattern.observer.observer.SecondObserver;
import com.freshbin.pattern.observer.subject.Subjecter;
/**
* 观察者模式
* @author freshbin
* @date 2019-1-3 10:12:48
*/
public class ObserverMain {
public static void main(String[] args) {
Subjecter subjecter = new Subjecter();
subjecter.addObserver(new FirstObserver());
subjecter.addObserver(new SecondObserver());
subjecter.groupAdminIsComing(true);
System.out.println("========================");
subjecter.groupAdminIsComing(false);
}
}
接着是演示效果图:
顺便提一下,jdk的观察者模式,对订阅者的处理好像是栈的结构,先加进去的订阅者,后通知。
最后附上github地址:https://github.com/freshbin/designPattern