zoukankan      html  css  js  c++  java
  • [设计模式]观察者模式

    1. 定义

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

    2. 类图

      

    3. 实例

      

    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年1月21日 下午3:40:21
     */
    public interface Observer {
        void update(String content);
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年1月21日 下午3:47:57
     */
    public class Reader implements Observer{
    
        private String name;
        
        public Reader(String name) {
            this.name = name;
        }
        
        @Override
        public void update(String content) {
            // TODO Auto-generated method stub
            System.out.println("读者" + this.name + "拿到了今天的报纸,今天报纸内容是:" + content);
        }
    
    }
    
    package com.jerry.designpattern;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    /**
     * 
     * @author Jerry
     * @date 2015年1月21日 下午3:39:36
     */
    public class Subject {
        private List<Observer> observers = new ArrayList<Observer>();
        
        protected void addObserver(Observer observer) {
            observers.add(observer);
        }
        
        protected void removeObserver(Observer observer) {
            observers.remove(observer);
        }
        
        protected void notifyObservers(String content) {
            Iterator<Observer> iterator = observers.iterator();
            while (iterator.hasNext()) {
                Observer observer = iterator.next();
                observer.update(content);
            }
        }
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年1月21日 下午3:50:45
     */
    public class Newspaper extends Subject{
        private String content;
        
        public void setContent(String content) {
            this.content = content;
            super.notifyObservers(this.content);
        }
    }
    
    package com.jerry.designpattern;
    /**
     * 
     * @author Jerry
     * @date 2015年1月21日 下午3:51:49
     */
    public class Client {
        public static void main(String[] args) {
            Newspaper newspaper = new Newspaper();
            
            /*
             * 创建若干读者
             */
            Reader reader1 = new Reader("唐三藏");
            Reader reader2 = new Reader("孙悟空");
            Reader reader3 = new Reader("猪悟能");
            Reader reader4 = new Reader("沙悟净");
            newspaper.addObserver(reader1);
            newspaper.addObserver(reader2);
            newspaper.addObserver(reader3);
            newspaper.addObserver(reader4);
            
            newspaper.setContent("唐僧师徒四人大闹女儿国");
        }
    }

    4. 优缺点

      观察者模式的优点

      a. 观察者实现了观察者和目标之间的抽象耦合

      b. 观察者实现了动态联动

      c. 观察者支持广播通信

      观察者模式的缺点

       由于观察者模式每次都是广播通信,不管观察者需不需要,每个观察者都会被调用update方法,如果观察者不需要执行相应处理,那么这次操作就浪费了。

  • 相关阅读:
    Spring——Spring整合Mybatis及事务
    Spring——配置,依赖注入,Bean的自动装配
    Mybatis—多对一和一对多
    Mybatis—动态SQL
    Elasticserch学习之查询字符串
    Elasticserch学习之分页
    Elasticserch学习之多索引和多类别
    Elasticserch学习之搜索(二)
    Elasticserch学习之数据
    Elasticserch学习之添加索引
  • 原文地址:https://www.cnblogs.com/jerry19890622/p/4286951.html
Copyright © 2011-2022 走看看