• 设计模式——观察者模式


    被观察者(Observable)是一个类,使用继承extends,因为它无需子类再去实现什么东西。观察者(Observer)是一个接口,使用实现implements,因为它需要子类去实现update函数,这个函数在被观察者发生变化时被执行。
    一般可理解为,Observable是一个中心数据库,Observer是许多个视图,用于从各个方面展示数据库的数据。

    //SimpleObserver.java
    package org.shu.pxz;
    import java.util.Observable;
    import java.util.Observer;
    
    public class SimpleObserver implements Observer
    {
        public SimpleObserver(SimpleObservable simpleObservable){
            simpleObservable.addObserver(this);//由于是被观察者去通知观察者,那么注册就需要调用被观察者的函数
        }
    
        public void update(Observable observable , Object data){
            System.out.println("Data has changed to " + ((SimpleObservable) observable).getData());
        }
    }
    
    //SimpleObservable.java
    package org.shu.pxz;
    import java.util.Observable;
    
    public class SimpleObservable extends Observable
    {
        private int data = 0;
    
        public int getData(){
            return data;
        }
    
        public void setData(int i){
            if(this.data != i) {
                this.data = i;
                setChanged();//Observable类的成员函数
    
                //只有在setChange()被调用后,notifyObservers()才会去调用update(),否则不调用
                notifyObservers();//Observable类的成员函数
            }
        }
    }
    
    //SimpleTest.java
    import org.shu.pxz.SimpleObservable;
    import org.shu.pxz.SimpleObserver;
    
    public class SimpleTest
    {
        public static void main(String[] args){
            SimpleObservable doc = new SimpleObservable ();//先有中心数据库,再有视图
            SimpleObserver view = new SimpleObserver (doc);//拿视图向中心数据库注册
            doc.setData(1);
            doc.setData(2);
            doc.setData(2);
            doc.setData(3);
        }
    }
    
    //output
    Data has changed to 1
    Data has changed to 2
    Data has changed to 3
  • 相关阅读:
    阿里云安骑士和云盾不能检测连接服务器问题
    UDP反射DDoS攻击原理和防范
    linux查看端口是否开放
    记一次阿里云服务器被用作DDOS攻击肉鸡
    记一次阿里云负载测试
    mysql定时任务event——清理过期数据
    ansible(一)
    基于python实现的三方组件----Celery
    MongoDB
    flask相关使用
  • 原文地址:https://www.cnblogs.com/season-peng/p/6713482.html
Copyright © 2020-2023  润新知