zoukankan      html  css  js  c++  java
  • 设计模式20-观察者模式

    1. 概念

        定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新

    2. 案例

        

    package org.demo.observe.demo01;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    abstract class Observer{ //观察者
        abstract void update(String status) ; //更新
    }
    
    abstract class Subject {  //被观察的对象
        protected String status ;
        public Subject(String status){
            this.status = status ; 
        }
        
        
        public String getStatus() {
            return status;
        }
    
        public void setStatus(String status) {
            this.status = status;
        }
    
    
        private List<Observer> observers = new ArrayList<Observer>() ;
        
        public void attach(Observer observer){
            observers.add(observer) ;
        }
        
        public void remove(Observer observer){
            observers.remove(observer) ;
        }
        
        public void MyNotify(){
            for(Iterator<Observer> it = observers.iterator() ; it.hasNext() ;){
                ((Observer)it.next() ).update(status);
            }
        }
    }
    
    
    class Obs01 extends Observer{
    
        @Override
        void update(String status) {
            System.out.println("观察者一发现了变化:"+status);
        }
    }
    
    class Obs02 extends Observer{
    
        @Override
        void update(String status) {
            System.out.println("观察者二发现了变化:"+status);
        }
    }
    
    class ConcreteSubject extends Subject{
    
        public ConcreteSubject(String status) {
            super(status);
        }
        
    }
    public class Demo01 {
        public static void main(String[] args) {
            ConcreteSubject cs = new ConcreteSubject("有新的新闻了 .") ;
            cs.attach(new Obs02()) ;
            cs.attach(new Obs01()) ;
            cs.MyNotify() ;
            cs.setStatus("又来新闻了") ;
            cs.MyNotify() ;
        }
    }
  • 相关阅读:
    java_监控工具jvisualvm
    bzoj3667: Rabin-Miller算法
    bzoj3677: [Apio2014]连珠线
    4070: [Apio2015]雅加达的摩天楼
    4069: [Apio2015]巴厘岛的雕塑
    4071: [Apio2015]巴邻旁之桥
    bzoj2653: middle
    1500: [NOI2005]维修数列
    bzoj4262: Sum
    bzoj4540: [Hnoi2016]序列
  • 原文地址:https://www.cnblogs.com/liaokailin/p/3804027.html
Copyright © 2011-2022 走看看