• 观察者模式


    被观察者

    所有被观察者都继承Observable接口 ( java标准库中Observable是一个抽象类)

    interface Observable{
        public void addObserver(Observer observer);
        public void deleteObserver(Observer observer);
        public void notifyObserver(String context);
    }
    class AA implements Observable,IHanFeiZi_3{
        //存放observer
        private ArrayList<Observer> observerList=new ArrayList<Observer>();
    
        @Override
        public void addObserver(Observer observer) {
            observerList.add(observer);
        }
    
        @Override
        public void deleteObserver(Observer observer) {
            this.observerList.remove(observer);
        }
    
        @Override
        public void notifyObserver(String context) {
            for(Observer observer:observerList){
                observer.update(context);
            }
        }
    
        @Override
        public void method1() {
          ...
        }
    
        @Override
        public void method2() {
          ...
        }
    }

    观察者

    所有的观察者都继承Observer接口

    interface Observer{
        public void update(String str);
    }
    class BB implements Observer{
        @Override
        public void update(String context) {
          ...
        }
    }

    场景

    public static void main(String[] args){
            Observer a1=new AA_1();
            Observer a2=new AA_2();
            Observer a3=new AA_1();
            BB bb=new BB();
    
            bb.addObserver(a1);
            bb.addObserver(a2);
            bb.addObserver(a3);
    
            bb.method1();
        }

    观察者模式的注意事项

    1. 需要注意效率问题
    2. 由于消息通知是顺序执行的, 如有需要, 可采用异步方式
    3. 消息不能无限制的传递下去, 一般而言, 在一个观察者模式中最多出现一个对象既是被观察者又是观察者. 否则程序的维护性会变得很差.
  • 相关阅读:
    WEBAPP开发技巧
    手机中的javascript事件
    I6下实现FIXED
    vim 使用帮助
    javascript小技巧
    webkitbox & translate CSS3动画详解
    backbone中的实例中文注释
    getClientRect和getBoundingClientRect获取节点的屏幕距离
    javascript判定不同浏览器
    jQuery中的trigger(type, [data]) 原生实现方法
  • 原文地址:https://www.cnblogs.com/fei-hsueh/p/6106298.html
Copyright © 2020-2023  润新知