多一点真诚,多一点套路,少一点随意---观察者模式
1、首先实现观察者接口Observer和接口中的方法update();
package com.test.observer;
public interface Observer {
public void update();
}
2、实现观察者接口的类Observer1、Observer2
package com.test.observerImpl;
import com.test.observer.Observer;
public class Observer1 implements Observer {
@Override
public void update() {
System.out.println("------- Observer1 update!!!");
}
}
package com.test.Subject;
import com.test.observer.Observer;
public interface Subject {
/*增加观察者*/
public void add(Observer observer);
/*删除观察者*/
public void del(Observer observer);
/*通知所有的观察者*/
public void notifyObservers();
/*自身的操作*/
public void operation();
}
4、实现观察目标接口的抽象类 添加Vector<Observer> mVector成员变量和覆写接口方法
package com.test.SubjectImpl;
import com.test.Subject.Subject;
import com.test.observer.Observer;
import java.util.Enumeration;
import java.util.Vector;
public abstract class AbstractSubject implements Subject {
public Vector<Observer> mVector = new Vector<Observer>();
@Override
public void add(Observer observer) {
mVector.add(observer);
}
@Override
public void del(Observer observer) {
mVector.remove(observer);
}
@Override
public void notifyObservers() {
Enumeration<Observer> enumeration = mVector.elements();
while (enumeration.hasMoreElements()) {
enumeration.nextElement().update();
}
}
// @Override
// public void operation() {
//
// }
}
5、观察目标类MySubject 继承抽象AbstractSubject,并覆写操作方法,在方法中通知各个观察者
package com.test.SubjectImpl;
public class MySubject extends AbstractSubject {
@Override
public void operation() {
System.out.println("------- update MySubject");
notifyObservers();
}
}
package com.test.main;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.test.Subject.Subject;
import com.test.SubjectImpl.MySubject;
import com.test.observerImpl.Observer1;
import com.test.observerImpl.Observer2;
/**
* http://blog.csdn.net/caihongdao123/article/details/51878760
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("0000000000------------------");
Subject subject = new MySubject();
Observer1 observer1 = new Observer1();
Observer2 observer2 = new Observer2();
subject.add(observer1);
subject.add(observer2);
subject.operation();
System.out.println("111------------------");
subject.del(observer1);
subject.operation();
System.out.println("222222------------------");
subject.add(observer2);
subject.operation();
}
/*
System.out: 0000000000------------------
System.out: ------- update MySubject
System.out: ------- Observer1 update!!!
System.out: -------Observer2 update!!!
System.out: 111------------------
System.out: ------- update MySubject
System.out: -------Observer2 update!!!
System.out: 222222------------------
System.out: ------- update MySubject
System.out: -------Observer2 update!!!
System.out: -------Observer2 update!!!
*/
}