`
Bruce.Wang
  • 浏览: 8395 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

设计模式之-观察者模式

阅读更多

观察者模式是一种一对多的关系。一是指数据主题对象,这是我们数据的来源。多的一方是指对数据进行各种各样的组合处理行为。可以进行无限扩展,我们对数据要处理只要加一个实现接口的类就可以了。我们的主题对象发生变化可以通知所以的观察者。观察者模式符合了OO设计里的松耦合原则。我们下面举例说明。 我们现在设计一个消息处理的交互系统,这个系统有一个消息的侦听器来得到消息,得到消息以后我们会根据消息的类型不同来对消息里的数据进行不同的处理。这样我们首先来设计侦听器的接口和类,这个接口里要有方法可以注册观察者,取消观察者,和通知观察者方法。

接下来要建立观察者接口和类,对消息的处理。

在主题和观察者两个类里互相要有对方的句柄。

下面我们可以看一下具体代码:

public interface Subject{
	public void reg(Observer o);
	public void remove(Observer o);
	public void notify();
}
public class MessageListener implements Subject{
	private ArrayList observers;
	private String message;

	public MessageListener(){
		observers = new ArrayList();
	}
	public void reg(Observer o){
		observers.add(o);
	}
	public void remove(Observer o){
		observers.remove(o);
                
                }
                public void nofify(){
	                for(int i=0;i<observers.size();i++){
		      Observer o = (Observer)observers.get(i);
		      o.execute(message);
                                 }
                 }
                public void setMessage(String message){
	                 this.message = message;
                }
}

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

public class InsertDbMessageExe{
                private Subject messageListener;
	public InsertDbMessageExe(Subject messageListener){
		this.messageListener = messageListener;
		messageListener.reg(this);
                }
	public void execute(String message){
		System.out.println(“insert this message to db. Message=”+message);
                }

}
public class FileUpdateMessageExe{
	private Subject messageListener;
	public FileUpdateMessageExe (Subject messageListener){
		this.messageListener = messageListener;
		messageListener.reg(this);
                }
	public void execute(String message){
		System.out.println(“update file with this message. Message=”+message);
                }
}

 

测试代码如下: 

public class test {
	public static void main(String[] arg){
		MessageListener ml = new MessageListener();
		InsertDbMessageExe idme = new InsertDbMessageExe(ml);
		FileUpdateMessageExe fume = new FileUpdateMessageExe(ml);
		ml.setMessage(“one”);
		ml.notify();
		ml.setMessage(“two”);
		ml.notify();
		
}
}

 

这样当消息发生改变的时候,就会通知观察者执行他们的方法处理消息。当然这里创建类的方法有点土,一般情况下用工厂方法创建,这是另一个设计模式。

好,最后在重复一下本模式的OO设计原则:松耦合设计,对接口编程。

 

分享到:
评论

相关推荐

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

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

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

    Android设计模式--观察者模式DEMO 观察者模式是一个使用频率非常高的模式,他最常用的地方是GUI系统和订阅-发布系统。 该模式的最重要的作用就是解耦,使观察者和被观察者之间依赖尽可能小,甚至好无依赖。

    C++设计模式--观察者模式 demo

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它在C++中的应用广泛且实用。这种模式的核心思想是“主体”(Subject)与“观察者”(Observer)之间的松耦合关系,允许一个对象(即主体)的状态...

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

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

    设计模式-观察者

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

    设计模式--观察者 c++版本

    观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心思想是主体(Subject)与观察者(Observer)之间的...

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

    观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象事件发生时通知多个“观察”该对象的其他对象。这个模式的核心在于建立一种一对多的关系,当一个对象的状态改变时,所有依赖于它的对象都会得到...

    设计模式系列博客--观察者模式

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

    设计模式-观察者模式-作业-observer.zip

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

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

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

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

    观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以及时地在对象之间传播状态变化。在Java中,观察者模式常用于构建事件驱动系统,使得多个对象能够监听并响应某个对象的状态改变。 首先,我们要理解...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 观察者模式(Observer):定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。 - 状态模式(State):允许对象在其内部状态改变时改变它的行为。 - ...

    跟我一起学 设计模式-观察者模式

    观察者模式,也称为发布-订阅模式或事件驱动模式,是一种行为设计模式,它定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 在C#、ASP.NET等.NET框架中,...

    HeadFirst 设计模式学习笔记2--观察者模式 demo

    观察者模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在构建可扩展和可维护的系统时。HeadFirst的设计模式系列书籍以其直观易懂的方式深受程序员喜爱,本笔记将深入探讨观察者模式的概念...

    设计模式-观察者模式(讲解及其实现代码)

    总结来说,观察者模式是一种重要的设计模式,它允许对象在状态改变时自动通知其他对象,从而降低了系统各部分之间的耦合度,提高了代码的灵活性和可扩展性。在实际项目中,正确使用观察者模式可以有效地管理组件间的...

    优秀的设计模式示例-观察者模式

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

    C++设计模式--基于Qt4开源跨平台开发框架

    《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...

    设计模式C++-观察者模式.doc

    观察者模式是一种软件设计模式,它允许对象在状态发生改变时通知其依赖的其他对象,以便这些对象可以相应地更新自身。这种模式是基于发布-订阅原则,即一个主题(Subject)可以拥有多个订阅者(Observer),当主题的...

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

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

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

    c++设计模式-行为型模式-观察者模式;qt工程;c++简单源码; 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式...

Global site tag (gtag.js) - Google Analytics