`
jsczxy2
  • 浏览: 1275410 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

学习设计模式之Observer模式(观察者模式)

阅读更多

引用一下某大的文章:

用户通常通过调用对象的方法来收集该对象的信息。但是当这个对象发生变化的时候,就会出现这样的一个问题:依赖该对象的用户如何才能知道对象的信息已经发生了变化?

我们可能通过这样一种设计:创建一个对象,每当用户所关心的对象某个方面发生变化的时候,该对象负责通知相关对此消息感兴趣的用户。这种设计的问题 在于只有用户自己才知道他关心的某对象的哪些方面,因而这个受关注的对象不应当承担这种通知用户的责任。解决方法之一就是:在受关注的对象收到信息之后, 通知用户,然后由用户去查询对象的新状态。

 

Observer模式的意图就是在多个对象之间定义一个一对多的关系,以便当一个对象状态改变的时候,其他所有依赖于这个对象的对象都能够得到通知,并被自动更新。

 

1.例子

 

   JE 上的订阅采用的就是这个观察者模式 了,我们可以订阅我们所感兴趣的用户A。当用户A更新博客时,我们就可以随时收到并查看。这里就涉及到两个对象,一个是消息发布者(Noticer),还有一个就是消息接收者(Observer)

事情上JE上的每个用户ID既是消息发布者也是消息接收者,怎么说呢?

 

   1.当用户A被一群人订阅时,那么它就是消息发布者,当他有写了新博客时,它就会通知所有订阅他的人,告诉他们我写了新博客了。

  

   2.同样,用户A他也可能订阅订阅别人的博客,这个时候他就是消息接收者了

 

 

下面就写个简单的代码示之:

 

首先定义消息发布者接口(Notice)跟消息接收者接口(Observer):

1.订阅者-观察者接口

Observer.java

package com.xuyi.observer;

/**
 * @author xuyi
 *	观察者-订阅者
 */
public interface Observer {
	public void update(String message);
}

 2.信息发布者接口

Noticer.java

package com.xuyi.observer;

/**
 * @author xuyi
 *	信息发布者
 */
public interface Noticer {
	
	public void addObserver(Observer observer);
	
	public void removeObserver(Observer observer);
	
	public void notice(String message);
}

 3.生成2个订阅-观察者

User1.java

package com.xuyi.observer;

public class User1 implements Observer {

	public void update(String message) {
		System.out.println(User1.class.getSimpleName()+":"+message);
	}

}

 User2.java

package com.xuyi.observer;

public class User2 implements Observer {

	public void update(String message) {
		System.out.println(User2.class.getSimpleName()+":"+message);
	}

}

 4.信息发布者实现:

NoticerImpl.java

package com.xuyi.observer;

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

/**
 * @author xuyi
 * 实现发布者
 */
public class NoticerImpl implements Noticer {
	
	private List<Observer> observers = new ArrayList<Observer>();

	public void addObserver(Observer observer) {
		observers.add(observer);
	}
	
	public void removeObserver(Observer observer) {
		observers.remove(observer);
	}

	public void notice(String message) {
		for(Observer ob : observers){
			ob.update(message);
		}
	}

	

}

 5.Test.java

package com.xuyi.observer;

//Observer模式-观察者模式
public class Test {
	public static void main(String[] args) {
		Noticer noticer = new NoticerImpl();
		noticer.addObserver(new User1());
		noticer.addObserver(new User2());
		
		noticer.notice("新消息发布咯!");
	}
}
 
分享到:
评论

相关推荐

    设计模式C++学习之观察者模式(Observer)

    观察者模式(Observer)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在C++中广泛应用,特别是在需要...

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

    观察者模式,也被称为发布-订阅模式或事件驱动模式,是软件设计模式中的一种行为模式。这个模式的主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...

    设计模式之观察者模式(Observer)

    观察者模式(Observer)是软件设计模式中的一种行为模式,其主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式广泛应用于事件驱动...

    [行为模式]head first 设计模式之观察者模式(observer)

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在软件开发中广泛应用于事件驱动...

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

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者...

    C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)

    **C#面向对象设计模式纵横谈(19)**:**观察者模式**(Observer Pattern)是行为型模式的一种,它在软件工程中扮演着至关重要的角色。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...

    设计模式学习之Observer(观察者模式)

    **观察者模式(Observer Pattern)**是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在分布式系统、事件...

    设计模式之略见一斑(Observer观察者模式)

    本篇文章将深入探讨“Observer”观察者模式,这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心概念是主题...

    C++设计模式之观察者模式(Observer)

    观察者模式通常的叫法叫做订阅-发布模式,类似于报刊杂志的订阅,观察者和被观察者就是读者和邮局的关系,读者先要在邮局订阅想要的报刊,当报刊发行时,邮局会将报刊邮寄到读者家里。观察者(Observer)和被观察者...

    设计模式之Observer

    在阅读《设计模式之Observer》这篇博文中,作者可能会深入解析Observer模式的实现细节,包括如何创建主题和观察者,如何建立它们之间的关系,以及如何处理状态变化时的通知机制。通过学习和理解Observer模式,我们...

    Observer设计模式实例

    Observer设计模式,也被称为“发布-订阅”(Publish-Subscribe)模式或“依赖倒置”模式,是软件设计中的一种行为模式。它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到...

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

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现发布-订阅...

    Observer 观察者模式 示例 源码 ----设计模式

    观察者模式 概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 适用性 1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装...

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

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

    设计模式之观察者模式

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

    (行为型模式) Observer 观察者模式

    C#面向对象设计模式 (行为型模式) Observer 观察者模式 视频讲座下载

    观察者模式,Observer

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...

    详解Observer Pattern(观察者模式)在Java中的使用原理

    我们说学习Java应该从Swing开始,那么学习Swing最重要的思想就是对于观察者模式的理解(Observer Pattern)。因为,该设计模式在Java Swing框架中贯穿了始终。对于C#的委托、代理概念所使用的Callback(回调模式--...

    观察者模式(Observer)

    观察者模式(Observer)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态变化时通知多个“观察”该对象的其他对象。这个模式在软件工程中扮演着重要角色,尤其是在事件驱动编程和发布/订阅系统中。...

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

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...

Global site tag (gtag.js) - Google Analytics