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

Posted sgx2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式---观察者模式相关的知识,希望对你有一定的参考价值。

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

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接收到消息通知

 

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

设计模式之观察者模式

观察者模式是啥

[设计模式]观察者模式与订阅模式

设计模式-行为型模式-观察者模式

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

设计模式之行为型模式