package Obverser;

//抽象观察者
public interface Obverser {
    public void update();

}
//具体观察者
class student implements Obverser {

    public void update() {
        System.out.println("学生观察者,跑进教室");
    }
}

class teacher implements Obverser {

    public void update() {
        System.out.println("老师观察者,走进教室");
    }
}


package Obverser;

import java.util.ArrayList;


//抽象被观察者
public interface subject {
    public void notifysubject();

    public void attach(Obverser ob);

    public void detach(Obverser ob);
}

//具体被观察者
class concreteSubject implements subject {

    private ArrayList<Object> obverserlist = new ArrayList<Object>();

    public void notifysubject() {
        ArrayList en = observers();
        int i = obverserlist.size();

        for (int j = 0; j < i; j++) {
            ((Obverser) obverserlist.get(j)).update();
        }
    }

    private ArrayList observers() {
        return obverserlist;
    }


    public void attach(Obverser ob) {
        obverserlist.add(ob);
    }

    public void detach(Obverser ob) {
        obverserlist.remove(ob);
    }
}
package Obverser;

public class client {
    public static void main(String[] args) {
        Obverser s1 = new student();
        Obverser s2 = new student();
        Obverser s3 = new student();
        Obverser t1 = new teacher();
        concreteSubject c = new concreteSubject();
        c.attach(s1);
        c.attach(s2);
        c.attach(s3);
        c.attach(t1);
        c.notifysubject();
    }
}

运行结果: