• 观察者模式(Obeserver Pattern)


    观察者模式(Obeserver Pattern)也叫作发布订阅模式(Publish/subscribe),在项目中经常会见到该模式。

    观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。

    在观察者模式中有几个角色名称:

    1.Subject被观察者

    定义被观察者必须实现的职责,它必须能够动态的增加、取消观察者。它一般是抽象类或者是实现类,仅仅完成作为被观察者必须实现的职责:管理观察者并通知观察者。

    2.Observer观察者

    观察者收到消息后,即进行update操作,对收到的消息进行处理。

    3.ConcreteSubject具体的被观察者

    定义被观察者自己的业务逻辑,同事定义对哪些事件进行通知。

    4.ConcreteObserver具体的观察者

    每个观察者在接收到消息后的处理反应是不同,各个观察者都有自己的处理逻辑

    下面我们来看一下简单的通用代码:

    被观察者抽象类

    public abstract class Subject {
        //定义一个观察者集合
        private Vector<Observer> observers = new Vector<Observer>();
    
        //增加一个观察者
        public void addObserver(Observer observer) {
            this.observers.add(observer);
        }
    
        //删除一个观察者
        public void delObserver(Observer observer) {
            this.observers.remove(observer);
        }
    
        //通知使用观察者
        public void notifyObserver() {
            for (Observer observer : observers) {
                observer.update();
            }
        }
    }

    具体的被观察者

    public class ConcreteSubject extends Subject {
        //具体的业务
        public void doSomeThing() {
            System.out.println("被观察者开始做事");
            this.notifyObserver();
        }
    }

    观察者接口

    public interface Observer {
        //更新方法
        void update();
    }

    具体的观察者

    public class ConcreteObserver implements Observer {
        //实现更新方法
        public void update() {
            System.out.println("观察者收到通知信息,并进行处理。。。。");
            new Observable();
        }
    }

    测试类:

    public class Test {
        public static void main(String[] args) {
            //创建一个观察者
            ConcreteObserver concreteObserver = new ConcreteObserver();
            //创建一个被观察者
            ConcreteSubject concreteSubject = new ConcreteSubject();
            //添加进观察者集合
            concreteSubject.addObserver(concreteObserver);
            //被观察者开始活动
            concreteSubject.doSomeThing();
        }
    }

    执行结果如下:

    被观察者开始做事
    观察者收到通知信息,并进行处理。。。。
    
  • 相关阅读:
    SD_WebImage-03-多线程+下载任务放入非主线程执行
    NSOperationQueue_管理NSOperation-02-多线程
    CALayer小结-基本使用00-UI进阶
    XMPP-UI进阶-01
    XMPP总结-UI进阶-00
    UI控件总结-UI初级
    转场动画-01-day4
    暂停-开始动画-核心动画-08-day4
    核心动画-04-CALayer隐式动画
    Android开发技术周报 Issue#71
  • 原文地址:https://www.cnblogs.com/demo-alen/p/13547228.html
Copyright © 2020-2023  润新知