• 设计模式之 观察者模式


    又叫发布-订阅者模式,或者模型-视图模式。

    在被观察者的状态发生变化时,系统基于事件驱动理论将其状态通知到订阅其状态的观察者对象中,以完成状态的修改和事件传播。

    image

    (1)定义抽象主题

    public abstract class Subject{
        protected List<Observer> observers = new ArrayList<>();
        public void add(Observer observer){
            observers.add(observer);
        }
        public void remove(Observer observer){
            observers.remove(observer);
        }
        
        public abstract void notifyObserver(String message);
    }

    (2)定义具体主题

    public class ConcreteSubject extends Subject{
        private  final static Log logger = LogFactory.getLog(this.getClass());
    
        @Override
        public void notifyObserver(String message){
            for (Observer obs:observers){
                logger.info("notity observer "+message+" change...");
                obs.dataChange(message);
            }
        }
    }

    (3)定义观察者

    public interface Observer{
        void dataChange(String message);
    }
    
    public class ConcreteObserver implements Observer{
        private  final static Log logger = LogFactory.getLog(this.getClass());
        
        @Override
        public void dataChange(String message){
            logger.info("receivd message: "+message);
        }
    }

    (4)使用观察者模式

    public static void main(String[] args){
        Subject subject = new ConcreteSubject();
        Observer obs = new ConcreteObserver();
        subject.add(obs);
        subject.notifyObserver("data1");
    }

  • 相关阅读:
    .Net中的AOP系列之《方法执行前后——边界切面》
    【信息学奥赛一本通】题解目录
    7219:复杂的整数划分问题
    1039 数的划分
    7215:简单的整数划分问题
    大整数阶乘的计算
    大数阶乘的位数和精确值计算【转】
    Window.Open详解
    在asp.net中显示PDF的方法:
    位运算技巧
  • 原文地址:https://www.cnblogs.com/betterwgo/p/15237229.html
Copyright © 2020-2023  润新知