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方法,如果观察者不需要执行相应处理,那么这次操作就浪费了。

  • 相关阅读:
    第五小节之JAVA IO流
    第四小节之Java 集合类
    初学的重点
    第三小节之Java API
    实践周java基础软件开发app之五子棋
    出栈合法性
    Python介绍
    Ubuntu主题美化篇
    Ubuntu16.04比较好的一系列软件安装介绍
    Ubuntu使用Shadow socks-qt5
  • 原文地址:https://www.cnblogs.com/jerry19890622/p/4286951.html
Copyright © 2011-2022 走看看