编程模式之观察者模式(Observer)

Posted

tags:

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

观察者模式由四个角色组成:抽象主题角色,抽象观察者角色,具体主题角色,抽象观察者角色,具体观察者角色

抽象主题角色(Subject):把所有的观察者角色的引用保存在一个集合中,可以有任意数量的观察者。其提供一个接口,可以添加、删除观察者,并可以向登记过的观察者发送通知。

具体主题角色(Observer):实现了抽象主题角色提供的接口的一个具体类。

抽象观察者角色(ConcreteSubject):提供一个借口,以接收主题角色发送的通知。

具体观察者角色(ConcreteObserver):实现了抽象观察者角色提供的接口的一个具体类。

 

 类图

技术分享

 

JAVA代码:

package com.observer;

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

/**
 * 抽象主题角色,被观察
 * @author hyp
 *
 */
public interface Subject
{
    void addWatcher(Watcher watcher);
    void removeWatcher(Watcher watcher);
    void notify(String message);
}


/**
 * 抽象观察者角色,观察主题
 * @author hyp
 *
 */
public interface Watcher
{
    void update(String message);
}




/**
 * 具体主题角色
 * @author hyp
 *
 */
public class ConcreteSubject implements Subject
{
    private List<Watcher> watchers = new ArrayList<Watcher>();
    
    @Override
    public void addWatcher(Watcher watcher)
    {
        watchers.add(watcher);
    }

    @Override
    public void removeWatcher(Watcher watcher)
    {
        watchers.remove(watcher);
    }

    @Override
    public void notify(String message)
    {
        for(Watcher w:watchers)
        {
            w.update(message);
        }
    }
}


/**
 * 具体观察者橘色
 * @author hyp
 *
 */
public class ConcreteWatcher implements Watcher
{

    @Override
    public void update(String message)
    {
        System.out.println(this.toString()+ ":" + message);
    }
}

/**
 * 测试观察者模式
 * @author hyp
 *
 */
public class Test
{
    public static void main(String[] args)
    {
        Subject subject= new ConcreteSubject();
        Watcher watcher1 = new ConcreteWatcher();
        Watcher watcher2 = new ConcreteWatcher();
        Watcher watcher3 = new ConcreteWatcher();
        
        Subject.addWatcher(watcher1);//添加观察者
        Subject.addWatcher(watcher2);
        Subject.addWatcher(watcher3);
        
        Subject.notify("Hello");//通知所有观察者
        
        Subject.removeWatcher(watcher1);//移除一个观察者
        
        Subject.notify("bye~");
        
    }
}

 

 

以上是关于编程模式之观察者模式(Observer)的主要内容,如果未能解决你的问题,请参考以下文章

JAVA SCRIPT设计模式--行为型--设计模式之Observer观察者模式(19)

JAVA SCRIPT设计模式--行为型--设计模式之Observer观察者模式(19)

秒懂设计模式之观察者模式(Observer Pattern)

秒懂设计模式之观察者模式(Observer Pattern)

编程思想设计模式行为模式Behavioral观察者模式Observer

设计模式----行为型模式之观察者模式(Observer Pattern)