码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式---观察者模式

时间:2019-08-05 21:52:35      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:arraylist   port   src   程序   notify   适用于   ide   ring   strong   

  观察者模式主要是为了松耦合,通俗的讲是发布订阅,适用于消息通知的场景。

1、定义

  观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

2、UML

      技术图片

3、案例

定义主题接口:

package ilan.Observer;

public interface Subject {
    void registerObserver(Observer observer);

    void removeObserver(Observer observer);

    void notifyObservers();
}

定义主题实现类:

package ilan.Observer;

import java.util.ArrayList;
import java.util.List;

public class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();

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

    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyObservers() {
        for (Observer o : observers) {
            o.update("消息通知");
        }
    }
}

 

定义观察者接口:

package ilan.Observer;

public interface Observer {
    void update(String message);
}

定义观察者实现类:

package ilan.Observer;

public class ConcreteObserver1 implements Observer {
    @Override
    public void update(String message) {
        System.out.println("观察者1接收到" + message);
    }
}
package ilan.Observer;

public class ConcreteObserver2 implements Observer {
    @Override
    public void update(String message) {
        System.out.println("观察者2接收到" + message);
    }
}

 

编写测试程序:

package ilan.Observer;

public class MainClass {
    public static void main(String[] args) {
        Subject subject = new ConcreteSubject();
        Observer c1 = new ConcreteObserver1();
        Observer c2 = new ConcreteObserver2();
        subject.registerObserver(c1);
        subject.registerObserver(c2);

        subject.notifyObservers();
    }
}

测试结果:

观察者1接收到消息通知
观察者2接收到消息通知

 

设计模式---观察者模式

标签:arraylist   port   src   程序   notify   适用于   ide   ring   strong   

原文地址:https://www.cnblogs.com/sgx2019/p/11300086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!