美文网首页Android设计模式
Observer 观察者模式

Observer 观察者模式

作者: Charles1993 | 来源:发表于2019-12-07 19:43 被阅读0次

    设计原则学习笔记
    设计模式学习笔记

    作用

    使数据结构的变换可以从数据结构主动通知到观察者处。同时方便观察者和被观察者扩展。

    类图

    观察者模式

    Java实现

    // 定义观察者接口
    public interface Observer {
        void update();
    }
    // 实现观察者接口
    public class ConcreteObserver implements Observer {
        @Override
        public void update() {
    
        }
    }
    // 定义被观察者接口
    public abstract class Subject {
        List<Observer> list = new LinkedList<>();
        public void attach(Observer observer) {
            list.add(observer);
        }
        public void detach(Observer observer) {
            list.remove(observer);
        }
        protected void notifyObserver() {
            for (Observer observer : list) {
                observer.update();
            }
        }
    }
    // 实现被观察者,在数据变化时调用notify方法通知到观察者
    public class ConcreteSubject extends Subject {
        private int state;
    
        public int getState() {
            return state;
        }
    
        public void setState(int state) {
            this.state = state;
            notifyObserver();
        }
    }
    // 客户端绑定观察者与被观察者
    public class Client {
        public static void main(String[] args) {
            ConcreteSubject subject = new ConcreteSubject();
            Observer observer = new ConcreteObserver();
            subject.attach(observer);
            subject.setState(1);
            subject.detach(observer);
        }
    }
    

    观察者模式分为推模型和拉模型,推模型在通知的时候主动将数据推给观察者,拉模型则只通知观察者发生了变换,具体数据需要单独再获取。

    Android源码中的应用

    • ContentObserver
    • BroacastRecivier

    相关文章

      网友评论

        本文标题:Observer 观察者模式

        本文链接:https://www.haomeiwen.com/subject/fgaugctx.html