zoukankan      html  css  js  c++  java
  • Java设计模式学习笔记(观察者模式)

        观察者模式说起来很简单,就是一个订报纸的模式。但是实际上这部分我觉得还是很有意思的,《Head First设计模式》里还有一些还没看完,也是因为理解的不够深吧。

        观察者模式会包含两个组件:观察者和主题。

        这段代码是主题的接口:

        

    package obeserver;
    
    public interface Subject {
        public void registerObserver(Observer observer);
        public void removeObserver(Observer observer);
        public void notifyObserver();
    }

        下面是观察者的接口:

    package obeserver;
    
    public interface Observer {
        public void update(String str);
    }

        然后就是具体的主题实现:

        

    package obeserver;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class concreteSubject implements Subject {
        List<Observer> list = new ArrayList<Observer>();
        
        @Override
        public void registerObserver(Observer observer) {
            // TODO Auto-generated method stub
            list.add(observer);
        }
    
        @Override
        public void removeObserver(Observer observer) {
            // TODO Auto-generated method stub
            list.remove(observer);
        }
    
        @Override
        public void notifyObserver() {
            // TODO Auto-generated method stub
            for (Observer o : list) {
                o.update("Hello, World!");
            }
        }
    
    }

         下面的代码是具体的观察者实现:

         

    package obeserver;
    
    public class concreteObserver implements Observer {
    
        @Override
        public void update(String str) {
            // TODO Auto-generated method stub
            System.out.println(str);
        }
    }

         下面写一段测试代码看看:

         

    package obeserver;
    
    public class observerTest {
        public static void main(String[] args) {
            Subject s1 = new concreteSubject();
            Observer o1 = new concreteObserver();
            Observer o2 = new concreteObserver();
            Observer o3 = new concreteObserver();
            s1.registerObserver(o1);
            s1.registerObserver(o2);
            s1.registerObserver(o3);
            s1.notifyObserver();
        }
    }

        这段测试代码会输出三行的“Hello, World!”。

        其实我觉得这里的update方法写Hello,world是不能说明问题的。其实这个方法里应该是更新观察者的其他一些状态的,比如书里写的气象站的一些数据(气温,湿度等),这样才叫做update。

        总结一下,观察者模式其实和订报纸很像,报社(主题)维护着订阅方法和取消订阅方法,同时也维护着送报纸的方法。而订报纸的人(观察者)接收到报纸之后,看报了就能了解新闻,增广见闻,这就是update了。

  • 相关阅读:
    LVM快照备份与恢复
    Docker Images for MySQL Group Replication 5.7.14
    sysbench write and read only
    Leetcode: Closest Leaf in a Binary Tree
    Amazon | OA 2019 | Optimal Utilization
    物联网架构成长之路(27)-Docker练习之Zookeeper安装
    物联网架构成长之路(26)-Docker构建项目用到的镜像2
    物联网架构成长之路(25)-Docker构建项目用到的镜像1
    物联网架构成长之路(23)-Docker练习之Elasticsearch服务搭建
    物联网架构成长之路(22)-Docker练习之Etcd服务搭建
  • 原文地址:https://www.cnblogs.com/wingsless/p/5255431.html
Copyright © 2011-2022 走看看