观察者模式

135 阅读1分钟
观察者s、被观察对象持有许多观察者,遍历通知。
   //观察者要实现的接口
public interface Observer {
   public void observe(String name);
}

    //被观察的对象,
//该对象持有所有Observer,有变化时,可以通知每个observer
public class SubjectObj {
    private final List<Observer> observers=new ArrayList<>();

    public void noticeAll(String s){
        for (Observer ob:observers){
            ob.observe(s);
        }
    }

    public void addObserver(Observer o){
        observers.add(o);
    }
}

//可以在lambda中去掉的类 具体观察者对象
    public class Ob1 implements Observer {

    @Override
    public void observe(String name) {
        System.out.println("ob1"+" "+name);
    }
}

    public class Ob2 implements Observer {

    @Override
    public void observe(String name) {
        System.out.println("ob2"+" "+name);
    }
}

public class Demo {
    public static void main(String[] args) {
        SubjectObj subjectObj=new SubjectObj();
        subjectObj.addObserver(new Ob1());
        subjectObj.addObserver(new Ob2());

        subjectObj.noticeAll("alarm");


        //lambda way,不需要新建ob1 ob2 两个类

        subjectObj.addObserver(name -> System.out.println("ob3"));
        subjectObj.addObserver(name -> System.out.println("ob4"));
        subjectObj.noticeAll("al");
    }
}