Android 设计模式-观察者模式

这里我们举一例子学校点名的例子,首先创建我们所说的观察者和被观察者

    public interface Observable {
        //订阅
        public void attach(Observer observer);
        //取消订阅
        public void detach(Observer observer);
        //发布
        public void notifyObservers(String message);
    }
    public interface Observer {
        //给个名字来分辨不同的观察者
        void setName(String name);
        //观察者的方法
        void say(String message);
    }

各位可以思考一下,根据上面的介绍,学生和老师,谁是观察者,谁是被观察者,下面就看代码给你分析

    public class Teather implements Observable {

        private List observers = new ArrayList<>();

        @Override
        public void attach(Observer observer) {
            observers.add(observer);
        }

        @Override
        public void detach(Observer observer) {
            observers.remove(observer);
        }
  
        @Override
        public void notifyObservers(String message) {
            for (Observer observer : observers) {
                observer.say(message);
            }
        }
    }

    public class Student implements Observer {

        private String name;

        @Override
        public void setName(String name) {
            this.name = name;
        }

        @Override
        public void say(String message) {
            System.out.println(message + ":" + this.name + "到");
        }
    }

通过代码可以看到,注意分别实现的不同接口

1、老师是被观察者,他需要实现接口的方法

订阅/取消订阅:往集合中存放/移除观察者
发布:循环遍历观察者,调用观察者方法
2、学生是观察者,那么我们只需要给他个名字,实现观察者的方法即可

最后,我们就把观察者和被观察者关联起来,LessonStart (上课啦)

    public class LessonStart {
          public static void main(String[] args){

            Observable teather = new Teather();

            Observer xiaoming = new Student();
            xiaoming.setName("小明");

            Observer xiaohong = new Student();
            xiaohong.setName("小红");
    
            teather.attach(xiaoming);
            teather.attach(xiaohong);

            teather.notifyObservers("点名啦");
        }
    }

你可能感兴趣的:(Android 设计模式-观察者模式)