观察者模式

当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。

// 定义一个接口,为所有观察者提供统一的更新方法
public interface Observer {
    public void update();
}

// 定义观察者1
public class Observer1 implements Observer{
    @Override
    public void update() {
        Log.i("sml", "update: observer1 has receivered !");
    }
}

// 定义观察者2
public class Observer2 implements Observer{
    @Override
    public void update() {
        Log.i("sml", "update: observer2 has receivered !");
    }
}

// 定义操作观察者接口
public interface Subject {

    // 增加观察者
    void addObserver(Observer observer);

    // 删除观察者
    void delObserver(Observer observer);

    // 通知所有观察着
    void notifyAllObserver();

    // 自身的操作
    void operation();
}

// 定义抽象类
public class AbstractSubject implements Subject {

    private Vector vector = new Vector();

    @Override
    public void addObserver(Observer observer) {
        vector.add(observer);
    }

    @Override
    public void delObserver(Observer observer) {
        vector.remove(observer);
    }

    @Override
    public void notifyAllObserver() {
        Enumeration enumo = vector.elements();
        while (enumo.hasMoreElements()) {
            enumo.nextElement().update();
        }
    }

    @Override
    public void operation() {

    }
}

public class MySubject extends AbstractSubject{

    @Override
    public void operation() {
        super.operation();
        notifyAllObserver();
    }
}

Subject subject = new MySubject();
subject.addObserver(new Observer1());
subject.addObserver(new Observer2());
subject.operation();

 

你可能感兴趣的:(设计模式)