Java设计模式学习笔记(观察者模式)

Posted wingsless

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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了。

以上是关于Java设计模式学习笔记(观察者模式)的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记——设计模式之十.观察者模式

Java设计模式学习笔记

C++设计模式学习笔记:观察者模式 Observer

C++设计模式学习笔记:观察者模式 Observer

设计模式 - 学习笔记 - 观察者模式ObserverPattern

设计模式 - 学习笔记 - 观察者模式ObserverPattern