Head First Design Patten观察者模式

认识观察者模式

看看报纸和杂志订阅是怎么回事

1、报社的业务是出版报纸

2、你向报社订阅报纸

3、你不想继续看该报纸时,取消订阅该报社的报纸

4、报社在新出版报纸时,分发报纸给订阅者

出版者 + 订阅者 = 观察者

观察者模式定义了对象间一对多依赖,当一个对象状态改变时,它的依赖者都会收到通知并自动更新,主题一般有状态,而且能够控制状态

public interface Subject {

    public void  registerObserver(Observer o);
    public void  removeObserver(Observer o);
    public void  notifyObserver();
}

public interface Observer {

    public void update(float a,float b,float c);
}

public interface DisplayElement {
    public void display();
}

public class WeatherData implements Subject {

    private ArrayList<Observer> observers;
    private float t;
    private float h;
    private float p;

    public WeatherData(){
        observers =  new ArrayList<Observer>();
    }

    @Override
    public void notifyObserver() {
        for (int i=0;i<observers.size();i++){
            Observer observer = observers.get(i);
            observer.update(t,h,p);
        }
    }

    @Override
    public void registerObserver(Observer o) {
        observers.add(o);
    }

    @Override
    public void removeObserver(Observer o) {
        int i = observers.indexOf(o);
        if(i>0) {
            observers.remove(i);
        }
    }

    public void measurementChanged(){
        notifyObserver();
    }

    public void  setMeasurements(float t,float h,float p){
        this.t = t;
        this.h = h;
        this.p = p;
        measurementChanged();
    }

}

public class CurrentConditionsDisplay implements Observer,DisplayElement{

    private float t;
    private float h;
    private float p;
    private Subject subject;

    public CurrentConditionsDisplay(Subject subject){
        this.subject = subject;
        subject.registerObserver(this);
    }

    @Override
    public void display() {
        System.out.println("T : " +t +" H : "+h + " P : "+p);
    }

    @Override
    public void update(float a, float b, float c) {
        this.t = a;
        this.h = b;
        this.p = c;
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        display();
    }
}

public class WeatherStation {

    public static void main(String[] args){
        WeatherData wd = new WeatherData();
        CurrentConditionsDisplay ccd1 = new CurrentConditionsDisplay(wd);
        CurrentConditionsDisplay ccd2 = new CurrentConditionsDisplay(wd);

        wd.setMeasurements(1,2,3);
        wd.setMeasurements(4,5,6);
    }
}
时间: 2024-12-24 06:56:16

Head First Design Patten观察者模式的相关文章

Head First Design Patten装饰者模式

开放-关闭原则 类应该对扩展开放,对修改关闭:当类中需要加入新功能时,可以考虑扩展新的类,而不是修改原有的类. 认识装饰者模式 1.拿一个咖啡为对象 2.以摩卡对象装饰它 3.以牛奶对象装饰它 4.调用cost方法,并依赖委托将调料价格加上 装饰者和被装饰对象有相同额超类型 你可以用一个或多个装饰者包装一个对象 装饰者可以在所委托被装饰者的行为之前或者之后,加上自己的行为,以达到特定的目的 对象可以在任何时候被装饰,所以可以在运行时动态地.不限量地用你喜欢的装饰者来装饰对象 装饰者模式动态的将责

设计模式之三:单例模式singleton

单例设计模式确切的说就是一个类只有一个实例,有一个全局的接口来访问这个实例.当第一次载入的时候,它通常使用延时加载的方法创建单一实例. 提示:苹果大量的使用了这种方法.例子:[NSUserDefaults standerUserDefaults], [UIApplication sharedApplication], [UIScreen mainScreen], [NSFileManager defaultManager] 都返回一个单一对象. 你可能想知道你为什么要关心一个类有多个的实例.代码

分布式技术一周技术动态 2016-07-31

分布式系统实践 1. 剖析Elasticsearch集群:分布式的三个C.translog和Lucene段 https://mp.weixin.qq.com/s?__biz=MzA5NzkxMzg1Nw==&mid=2653160175&idx=1&sn=3f982b5a2102f5966b512d2ad9e8e6db&scene=0&key=77421cf58af4a6534e55141c3bdbf944a4769a7471beab65d6fd0da55e6963

计算机书单

计算机书单 · 基础: <深入理解计算机系统>,对应的英文版是<Computer Systems: A Programmer's Perspective> · 语言: <Effective C++>, <More Effective C++> <C 专家编程> <Thinking in Java> · Android系统: <深入理解Android系统>,邓平凡 <Android情景分析>,老罗 · 操作系统:

Head First Design Pattern 读书笔记(2) 观察者模式

Head First Design Pattern 读书笔记(2) Observer Pattern 观察者模式 Observer Pattern 类图 定义 观察者模式:在对象间定义一个一对多的关系,当其中一个的对象发生改变时,所有依赖于这个对象的对象(即观察者们)都会自动更新或做执行某些行为. 几个OO的原测 尽量以松耦合的方式处理对象间关系–>软件工程时候学的"高內聚,低耦合"的好处 关于观察者模式 被观察对象通知观察者可以使用推送的方式(类图中带参数的notifyActi

Design Pattern 之 观察者模式

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51815880 观察者模式介绍 观察者模式 又称为 发布-订阅模式 .定义了一种一对多的依赖关系,当被观察者对象状态发生改变时,通知所有依赖于它(订阅它)的观察者对象. RSS订阅 和 邮件订阅 大家应该都知道,你订阅后,将会及时获得所订阅的相关最新内容.所有订阅该内容的"订阅者",当该内容有更新时,就可以收到通知.这就是一种观察者模式的应用场景. UML图 java中,内置

Observer Design Pattern(观察者模式)

观察者模式,顾名思义,是对象或者线程对某一对象或者线程进行持续性的关注,一旦被关注的对象或线程发生任何改变,能够及时的通知观察者,已做出正确的应对. 观察者模式在开发中非常常见,诸如某些管理系统,或者电子商务系统,创造观察者线程对需要关注的线程进行关注,一旦某种事件发生,则可以通知观察者做出反应.比如某工厂的生产管理系统,一旦某些重要指标超过警戒线,需要及时的通知观察者线程,可以依据不同的问题状况构建不同的观察者,不同的观察者可以以不同的方式或渠道通知用户,比如发送短信,发送邮件,推送手机APP

设计模式(Design Patterns)

设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问

观察者模式【设计模式】

The observer pattern is a software design pattern in which an object, called the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes, usually by calling one of their methods. It is mainl