`

java模式之观察者模式

阅读更多
       所谓观察者模式指的是一对多的关系的模式,可以用消息发布来作为比喻,发布者对应多个接受者,接受者可以注册或者删除订阅
       最典型的观察者模式应用的是Java的Swing时间监听事件,每个listener注册到事件处理的Handler中,当事件源发生的时候,将遍历(广播)消息到所有的Listener中执行相应的方法,如actionPerform()中;
         下面简单介绍一下我所理解的观察者模式。
         首先是订阅者,Listener接口:
package com.luchi.model.observer;

public interface Listener {
	
	public void attachToObserver(Observer observer);
	public void doThings();

}
 
        接口主要有两个方法,一个是attachToObserver,也就是订阅;一个是doThings()也就是其主要的工作
 
        在定义Observer接口:
package com.luchi.model.observer;

public interface Observer {

	
	
	public void addListner(Listener listener);
	public void removeListner(Listener listener);
	public void broadcastMsgs();

}
      其中 addListener()和removeListener()均是来增加或者减少订阅者的消息。broadcast()方法则是通知消息
 
       接下来我们看下Listener的两个实现
package com.luchi.model.observer;

public class ListenerImpl1  implements Listener{

	
	@Override
	public void doThings() {
		// TODO Auto-generated method stub
		
		
		System.out.println("ths is "+this.getClass().getName());
		
	}

	@Override
	public void attachToObserver(Observer observer) {
		// TODO Auto-generated method stub
		
		observer.addListner(this);
	}

}


package com.luchi.model.observer;

public class ListenerImpl2 implements Listener{

	@Override
	public void doThings() {
		// TODO Auto-generated method stub
		
		
		System.out.println("ths is "+this.getClass().getName());
		
	}

	@Override
	public void attachToObserver(Observer observer) {
		// TODO Auto-generated method stub
		
		observer.addListner(this);
		
	}

}
      以及Observer实现
package com.luchi.model.observer;

import java.util.HashSet;
import java.util.Set;

public class ObserverImpl implements Observer{

	
	private  Set<Listener> listeners=new HashSet<Listener>();
	
	@Override
	public  void addListner(Listener listener) {
		// TODO Auto-generated method stub
	
		synchronized (listeners) {
			
			listeners.add(listener);
		}
		
		
	}

	@Override
	public  void removeListner(Listener listener) {
		// TODO Auto-generated method stub
		synchronized (listeners) {
			
			listeners.remove(listener);
		}
	}

	@Override
	public  void broadcastMsgs() {
		// TODO Auto-generated method stub
		synchronized (listeners) {
			
			for(Listener node:listeners){
				
				node.doThings();
				
			}
		}
		
	}
	

}
    然后看一下测试程序:
package com.luchi.model.observer;

public class TestObserver {
	
	
	public static void main(String[]args){
		
		
		ObserverImpl observer =new ObserverImpl();
		ListenerImpl1 listener1=new ListenerImpl1();
		ListenerImpl2 listener2=new ListenerImpl2();
		listener1.attachToObserver(observer);
		listener2.attachToObserver(observer);
		observer.broadcastMsgs();
	}

}
  一个Observer有两个订阅者,然后看下结果
ths is com.luchi.model.observer.ListenerImpl2
ths is com.luchi.model.observer.ListenerImpl1
 
     由于HashSet有排序,姑且不用去看输出顺序。
     这是比较简单的实现方式,当然复杂的话,可以为每个Observer设置一个Handler,在Handler实现add和remove方法就行。另外考虑到时间的复杂性,也可以设计一个事件的接口,EventSource之类的,并实现即可。
         这这是最简单的观察者模式,我称之为订阅模式,类比于Java的Swing的监听事件,如给一个Button绑定listener,在Listener中实现相应的动作,当事件发生的时候(在Button中表示按下按钮事件),Button会将该动作传递到每一个订阅的Listener中并执行Listener中相应的动作,当然Swing实现的比较复杂,涉及到多线程的同步和通信过程,在此不提及
 

 

分享到:
评论

相关推荐

    java观察者模式观察者模式

    观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...

    java 设计模式 观察者模式 简单实例 包括测试test类

    在Java中,观察者模式的实现通常基于Java的内置接口`java.util.Observer`和`java.util.Observable`。下面将详细解释观察者模式的概念、结构以及如何在Java中应用这个模式。 **观察者模式的核心概念:** 1. **主题...

    Java内置观察者模式

    本文将深入探讨Java内置的观察者模式,包括其原理、实现方式以及实际应用。 ### 观察者模式的核心概念 1. **主题(Subject)**:被观察的对象,也就是发出通知的一方。在Java中,通常通过实现`java.util....

    java设计模式之观察者模式

    在Java中,观察者模式通常通过`java.util.Observable`和`java.util.Observer`这两个接口来实现。`Observable`类代表被观察的对象,它可以添加多个观察者,并在状态变化时通知它们。而`Observer`接口则定义了观察者的...

    设计模式之观察者模式Java实现

    在Java中,观察者模式通常通过Java内置的`java.util.Observable`类和`java.util.Observer`接口来实现。`Observable`类代表被观察的对象,它可以有多个观察者,而`Observer`接口则定义了观察者的通用行为。 首先,...

    运用MVC模式及观察者模式的java小程序

    在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...

    java23种设计模式之观察者模式

    **观察者模式(Observer Pattern)**是软件设计模式中的一种行为模式,它在Java中有着广泛的应用。这个模式的核心思想是“一对多”的依赖关系,即一个主题对象(Subject)可以被多个观察者(Observer)关注,当主题...

    设计模式--观察者模式java例子

    在Java中,观察者模式可以通过Java的内置接口`java.util.Observer`和`java.util.Observable`来实现。`Observer`接口代表观察者,而`Observable`类代表被观察的对象,也称为主题(Subject)。下面将详细介绍这两个...

    java观察者模式Demo

    标题中的“java观察者模式Demo”指的是使用Java语言来演示观察者模式的应用。通常,这个Demo会包含一个可观察的对象(Observable)和多个观察者(Observer),当可观察对象的状态发生变化时,会触发通知机制,使得...

    Java 观察者模式的浅析

    ### Java观察者模式详解 #### 一、观察者模式概述 观察者模式是一种常用的设计模式,主要用于处理对象间的一对多依赖关系。当一个对象(主题)的状态发生变化时,所有依赖于它的对象(观察者)都会收到通知并自动...

    观察者模式java实现观察者设计模式

    在Java中,我们可以利用Java提供的内置监听器机制来实现观察者模式,例如`ApplicationListener`和`ApplicationEvent`,这两个类主要用于Swing或JavaFX应用程序中的事件处理。 首先,我们来看`ApplicationListener`...

    java 了解观察者模式

    观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计模式中的行为模式之一,主要用于对象间的一对多依赖关系管理。在Java中,观察者模式的实现主要依赖于`java.util.Observable`和`java.util....

    java 观察者模式 demo

    在Java中,观察者模式的实现主要依赖于Java的`java.util.Observable`类和`java.util.Observer`接口。`Observable`类代表被观察的对象,它可以有多个观察者;`Observer`接口则代表观察者,它们需要实现`update`方法来...

    java观察者模式实例

    在这个实例中,我们将深入理解如何在Java中实现观察者模式,以及它如何利用继承和多态性来增强概念理解。 首先,观察者模式的核心思想是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的...

    Java常用的3中设计模式代码即工厂模式、单例模式、观察者模式demo

    在Java中,`java.util.Observable`和`java.util.Observer`接口提供了观察者模式的实现。例如,当我们有一个`WeatherStation`类(被观察者)和多个`WeatherDisplay`类(观察者)时,`WeatherStation`的气象数据变化会...

    Java观察者模式代码全解析

    Java观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在软件工程中广泛应用,尤其在事件驱动和发布/订阅系统中。...

    java实现观察者模式

    在Java中,观察者模式可以通过Java的内置API `java.util.Observable` 和 `java.util.Observer` 类来实现。`Observable` 类代表被观察的对象,而 `Observer` 接口则表示观察者。以下是对这两个关键类的详细解释: 1....

    java内置的观察者模式demo

    在Java中,观察者模式得到了内置支持,主要体现在`java.util.Observable`类和`java.util.Observer`接口中。下面我们将详细讨论这个模式以及如何使用Java内置的支持来实现它。 首先,我们要理解观察者模式的基本概念...

    Java 设计模式-观察者模式(Observer)

    结合微信公众号讲解观察者模式,生动形象,关键是上手快啊

Global site tag (gtag.js) - Google Analytics