理解:很好理解,假設(shè)有a和b刚夺,b看到a改變的献丑,因此b也改變了。
這里a是被觀察,b是觀察者侠姑。创橄。。
當(dāng)一個(gè)對(duì)象變化時(shí)莽红,其它依賴該對(duì)象的對(duì)象都會(huì)收到通知筐摘,并且隨著變化,對(duì)象之間是一種一對(duì)多的關(guān)系.
實(shí)現(xiàn)思路:
a持有b,當(dāng)a改變時(shí)船老,調(diào)用b的方法。圃酵。柳畔。oc的代理回傳~
代碼
public interface Observer {
public void update(); //觀察者接口
}
public class Observer1 implements Observer { //觀察者1
@Override
public void update() {
System.out.println("observer1 has received!");
}
}
public class Observer2 implements Observer { //觀察者2
@Override
public void update() {
System.out.println("observer2 has received!");
}
}
被觀察者
public interface Subject {
/*增加觀察者*/
public void add(Observer observer);
/*刪除觀察者*/
public void del(Observer observer);
/*通知所有的觀察者*/
public void notifyObservers();
/*自身的操作*/
public void operation();
}
//抽象類,子類只需要實(shí)現(xiàn)operation()就可以了
public abstract class AbstractSubject implements Subject {
private Vector<Observer> vector = new Vector<Observer>();
@Override
public void add(Observer observer) {
vector.add(observer);
}
@Override
public void del(Observer observer) {
vector.remove(observer);
}
@Override
public void notifyObservers() {
Enumeration<Observer> enumo = vector.elements();
while(enumo.hasMoreElements()){
enumo.nextElement().update();
}
}
}
//被觀察者
public class MySubject extends AbstractSubject {
@Override
public void operation() {
System.out.println("update self!");
notifyObservers();
}
}
使用
public class ObserverTest {
public static void main(String[] args) {
Subject sub = new MySubject();
sub.add(new Observer1());
sub.add(new Observer2());
sub.operation(); //被觀察者通知觀察者們郭赐,做出響應(yīng)
}
}