观察者模式(用做自己备忘,你们就别看了。。。太丑)

概念

正如字面意思,这是一种观察者的模式,被观察者(observable)做了某件事(调用方法||函数)后会立即通知观察者(observer),观察者知道后采取某些行动(调用方法||函数)。

目标

一般场景是,有多个观察者,去观察一个被观察者。

实现方式

1,首先,需要2个接口,一个被观察者接口,一个观察者接口,被观察者接口需要实现添加观察者(add),删除观察者(del),通知观察者(notify)方法,观察者接口需要实现更新(updata)方法。
2,其次,被观察者需要实现被观察接口,观察者需实现观察者接口;
3,最后,在应用场景(mian)中,实例化被观察者类,观察者类,并运行。


观察者模式(用做自己备忘,你们就别看了。。。太丑)_第1张图片
image.png

文件结构图:


观察者模式(用做自己备忘,你们就别看了。。。太丑)_第2张图片
image.png

代码:

observable接口:

public interface Observable{
   public void addObservers(Observer ob);
   public void delObservers(Observer ob);
   public void notifyObservers(Object object);
}

Observable实现类:

//被观察者实例
public class ObservableInstance implements Observable {
    private ArrayList obList=new ArrayList();

    public void addObservers(Observer o) {
        obList.add(o);
    }
    public void delObservers(Observer o) {
        obList.remove(o);
    }
    public void notifyObservers(Object obj) {
        for (Observer o : obList) {
            o.update(obj);
        }
    }
    public void dosomething() {
        System.out.println("我要开始行动了!!");
        this.notifyObservers("被观察者行动了");
    }
}

Observer接口:

//观察者接口
public interface Observer {
    public void update(Object ob);
}

Observer实现类:

//观察者1号
public class ObserverInstance1 implements Observer {

    public void update(Object ob) {
        System.out.println("观察者1观察到了————————"+ob.toString());
    }
}

Observer实现类:

//观察者2号
public class ObserverInstance2 implements Observer {

    public void update(Object ob) {
        System.out.println("观察者2观察到了————————"+ob.toString());
    }
}

应用场景类:

//应用场景类
public class main {
    public static void main(String[] args) {
        ObservableInstance observableInstance=new ObservableInstance();
        ObserverInstance2 observerInstance2=new ObserverInstance2();
        ObserverInstance1 observerInstance1=new ObserverInstance1();
        observableInstance.addObservers(observerInstance2);
        observableInstance.addObservers(observerInstance1);
        observableInstance.dosomething();
    }
}

扩展

java中有java.util.Observable实现类和java.util.Observer实现类,这两个类已经将被观察者的三个接口和观察者的一个接口实现了,继承这两个类便可实现观察者模式,继承Observable的类不需要去实现添加,删除,通知接口,方便实现。

你可能感兴趣的:(观察者模式(用做自己备忘,你们就别看了。。。太丑))