`
wdt1988520
  • 浏览: 15508 次
社区版块
存档分类
最新评论

Observer观察者模式

 
阅读更多

观察者模式:定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所以依赖于他的对象都得到通知并更新。

 

 

角色分析:

  抽象目标角色(Subject):

      目标角色提供观察者注册、删除接口,并发出通知。

  抽象观察者角色(IObserver):

      当目标角色发生改变时,获得通知的对象的一个更新接口。

 

实现:

  

package observer;
/**
 *create by datao.wang 2014-2-8-下午2:45:04	
 *目标对象
 */
public interface ISubject {
  
	public abstract void notifyObserver();
}

package observer;

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

/**
 *create by datao.wang 2014-2-8-下午2:50:48	
 */
public class Subject implements ISubject {
    List<IObserver> list=new ArrayList<IObserver>();
    
	@Override
	public void notifyObserver() {
		for(IObserver ob:list){
			ob.update();
		}
	}

	public void addObserver(IObserver o){
		list.add(o);
	}
	
	public void dosomething(){
		System.out.println("我要跟新了");
		//通知更新
		notifyObserver();
	}
}




package observer;
/**
 *create by datao.wang 2014-2-8-下午2:41:04	
 *抽象观察者
 */
public interface IObserver {
    public void update();
}

package observer;
/**
 *create by datao.wang 2014-2-8-下午2:42:33	
 *观察者1号
 */
public class Observer1 implements IObserver {

	@Override
	public void update() {
		System.out.println("发生改变....");
	}

}

package observer;
/**
 *create by datao.wang 2014-2-8-下午2:42:59	
 *观察者2号
 */
public class Observer2 implements IObserver {

	@Override
	public void update() {
		System.out.println("发生改变.....");
	}

}

package observer;
/**
 *create by datao.wang 2014-2-8-下午2:58:00	
 *客户端调用
 */
public class Client {
	public static void main(String[] args) {
		Subject subject=new Subject();
		Observer1 s1=new Observer1();
		Observer2 s2=new Observer2();
		subject.addObserver(s1);
		subject.addObserver(s2);
		subject.dosomething();
	}
}

 

应用场景:

    1、当一个对象的改变必须通知其他对象的时候,可采用观察者模式。

 

 

优点:

  1、实现目标对象鱼观察对象的松耦合

   2、实现广播通知注册的对象

 

缺点:

   1、如果观察者众多,话费时间较多。

   2、如果误操作目标对象,可能引起一连串的状态变更。

   3、异步通知,注意多线程操作。

 

 

分享到:
评论

相关推荐

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

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

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

    ### (行为型模式) Observer 观察者模式 #### 概述 观察者模式是一种行为设计模式,它定义了一种一对多的关系,让多个观察对象同时监听某一个主题对象。当主题对象发生变化时,所有观察者对象都会收到通知并进行...

    observer观察者模式

    观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在软件工程中,这常用于实现事件驱动编程,使得系统能够及时响应变化。 在...

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

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

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

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

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

    "ObserverPattern(订阅模式)3.zip"中的代码可能进一步阐述了观察者模式,这里的“订阅”一词可能意味着用户可以订阅特定的主题,只有当这些主题的状态改变时,用户才会收到通知。这与传统的观察者模式类似,但更加...

    android Observer(观察者模式)_案例祥解.pdf

    观察者模式详解 观察者模式是23种设计模式中的一种,尤其是在软件设计过程中体现的更是立足无穷。本文将详细讲解观察者模式的概念和实现,通过代码注释来解释各个组件的作用。 一、观察者模式的定义 观察者模式是...

    C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题示例

    本文实例讲述了C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题。分享给大家供大家参考,具体如下: 一.理论定义 观察者模式 描述了 一种 一对多的关系。 当某一对象的状态发生改变时,其他对象会得到 改变的...

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

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

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

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

    观察者模式Observer

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

    观察者模式(Observer)

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

    观察者模式(Observer)

    观察者模式(Observer)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态变化时通知多个“观察”该对象的其他对象。这个模式在软件工程中广泛应用于事件驱动编程,例如用户界面组件的交互或者系统状态的...

    观察者模式,Observer

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

Global site tag (gtag.js) - Google Analytics