使用 JDK 自带的 观察者模式
被观察者类,需要继承 Observable 类
import java.util.Observable;
/**
* Created by sean on 2017/11/23 9:28.
* 这是一个继承了Observable的观察者模式,改类为被观察者
*/
public class LoginWithJDK extends Observable {
public static void main(String[] args) {
LoginWithJDK loginWithJDK = new LoginWithJDK();
ObserverWithJDK(loginWithJDK);
loginWithJDK.loginSuccess();
}
public void loginSuccess(){
System.out.println("登录成功,通知观察者...");
//下面两个为父类的方法
setChanged();
notifyObservers();
}
}
观察者类,需要先实现 Observer 接口,并重写 update()方法
import java.util.Observable;
import java.util.Observer;
/**
* Created by sean on 2017/11/23 9:31.
* 改类为观察者类,当被观察者发生变化时调用update方法
*/
public class ObserverWithJDK implements Observer{
public ObserverWithJDK(LoginWithJDK loginWithJDK){
loginWithJDK.addObserver(this);
}
@Override
public void update(Observable o, Object arg) {
System.out.println("被观察者的方法被触发");
}
}
接口 Observer 的源码
不适用 JDK 中方法创建一个观察者模式案例
观察者需要实现的接口
public interface ObserverInterface {
void onSuccess(Object object);
}
观察者,需要实现上面接口
public class ObserverOriginal implements ObserverInterface{
public ObserverOriginal(LoginOriginal loginOriginal){
loginOriginal.addObject(this);
}
@Override
public void onSuccess(Object object) {
System.out.println("登录成功,通知观察者...");
}
}
被观察者,一个登陆的类,登陆成功之后通知观察者
public class LoginOriginal{
private List<ObserverInterface> loginInterfaces = new ArrayList<>();
public void addObject(ObserverInterface addObject){
loginInterfaces.add(addObject);
}
private void loginSuccess(){
for (ObserverInterface loginInterface : loginInterfaces) {
loginInterface.onSuccess(this);
}
}
public static void main(String[] args) {
LoginOriginal loginOriginal = new LoginOriginal();
new ObserverOriginal(loginOriginal);
loginOriginal.loginSuccess();
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于