`
fengzl
  • 浏览: 215555 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

自己实现的观察者模式

阅读更多
JAVA标准库实现
package com.moshi.observer;

import java.util.Date;
import java.util.Observable;

public class Product extends Observable  {
	
	private Long id;
	
	private String name;
	
	private Date endDate;
	
	private Integer price;
	
	

	public Product(Long id, String name, Integer price, Date date) {
		super();
		// TODO Auto-generated constructor stub
		endDate = date;
		this.id = id;
		this.name = name;
		this.price = price;
	}

	public Date getEndDate() {
		return endDate;
	}

	public void setEndDate(Date endDate) {
		this.endDate = endDate;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getPrice() {
		return price;
	}

	public void setPrice(Integer price) {
		this.setChanged();//修改价格通知 第一次
		notifyObservers(this.price);
		this.price = price;
		setChanged();//修改价格通知 第二次
		notifyObservers(price);
	}
	
	

}



package com.moshi.observer;

import java.util.Observable;
import java.util.Observer;

public class ProductObserver implements Observer {

	public void update(Observable arg, Object obj) {
		// TODO Auto-generated method stub
		System.out.println(arg.getClass().toString());
		if(obj instanceof Integer){
			System.out.println("产品:" + ((Product)arg).getName() +",最新价格修改为" + obj.toString());
		}

	}

}

package com.moshi.observer;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Product product = new Product(1L, "鞋", 1,new java.util.Date());
		product.addObserver(new ProductObserver());
		product.setPrice(2);
	}

}



我自己的实现,其实原理很简单
package org.moshi.observer;

import java.util.Observable;

/**
 * 观察对象的基础接口,所有观察者统一实现
 * @author Administrator
 *
 */
public interface ObsInterface {
	
	public void update(Object obj1, Object obj);

}



package org.moshi.observer;

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

/**
 * 继承该对象便拥有了被观察的能力
 * @author Administrator
 *
 */
public class ObserverBean {
	
	private boolean able = false;
	
	private List<ObsInterface> observers = new ArrayList<ObsInterface>();
	
	public void addObserver(ObsInterface o){
		observers.add(o);
	}
	
	public void setChanged(){
		this.able = true;
	}
	
	public void notifyObservers(Object obj1,Object obj2){
		if(this.able){
			for(ObsInterface o: observers){
				o.update(obj1,obj2);
			}
		}
		this.able = false;
	}
	
	public void notifyObservers(Object obj2){
		notifyObservers(this,obj2);
	}

}


package org.moshi.observer;

import java.util.Date;

public class Product extends ObserverBean{
	private Long id;
	
	private String name;
	
	private Date endDate;
	
	private Integer price;
	
	

	public Product(Long id, String name, Integer price, Date date) {
		super();
		// TODO Auto-generated constructor stub
		endDate = date;
		this.id = id;
		this.name = name;
		this.price = price;
	}

	public Date getEndDate() {
		return endDate;
	}

	public void setEndDate(Date endDate) {
		this.endDate = endDate;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getPrice() {
		return price;
	}

	public void setPrice(Integer price) {
		this.setChanged();//修改价格通知
		notifyObservers(this.price);
		this.price = price;
		this.setChanged();//修改价格通知
		notifyObservers(2);
	}
}


package org.moshi.observer;

import org.moshi.observer.Product;
/**
*实现观察者接口
*/
public class ProductObserver implements ObsInterface {

	public void update(Object obj1, Object obj) {
		// TODO Auto-generated method stub
		System.out.println(obj1.getClass().toString());
		if(obj instanceof Integer){
			System.out.println("产品:" + ((Product)obj1).getName() +",最新价格修改为" + obj.toString());
		}		

	}

}
分享到:
评论

相关推荐

    自己实现观察者模式

    在Java中,观察者模式可以通过内置的java.util.Observable类和java.util.Observer接口来实现。Observable类代表被观察的对象,Observer接口则定义了观察者的接口,当被观察对象的状态改变时,观察者需要执行的操作。...

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

    - **具体观察者(Concrete Observer)**:实现观察者接口,表示关注具体主题的个体,并定义了一个更新接口的具体实现,当主题状态改变时,会被调用。 3. **工作原理**:当主题对象的状态发生变化时,会调用`notify...

    委托实现观察者模式

    C#语言提供了一种强大的工具——委托,来实现观察者模式。 委托在C#中类似于函数指针,它能够引用方法,并可以在运行时动态地调用这些方法。委托是类型安全的,可以用来传递方法作为参数,或者将方法存储在变量中。...

    C++ 实现观察者模式小例子

    在这个"C++ 实现观察者模式小例子"中,我们看到它被应用到了显示器和报警器这两个组件上,它们根据泵的温度和压力来展示信息或触发警报。 首先,我们需要理解观察者模式的基本结构。在这个模式中,有三个主要角色:...

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

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

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

    而在其他语言中,如C#、Python等,也可以轻松实现观察者模式,通过事件或委托机制。 总结来说,观察者模式是一种重要的设计模式,它允许对象在状态改变时自动通知其他对象,从而降低了系统各部分之间的耦合度,提高...

    java实现观察者模式

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

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

    为了实现观察者模式,你需要创建一个实现了`Observer`接口的类,这个类代表具体的观察者。在这个类中,你需要实现`update()`方法,定义当接收到通知时应执行的操作。 接下来,我们可以创建一个具体的`Observable`...

    javascript实现观察者模式

    在JavaScript中,我们可以使用事件驱动模型来实现观察者模式。首先,我们需要创建一个事件中心或者称为事件管理器,这个中心将作为主题,存储所有的观察者。每当有事件发生,事件中心就会触发对应的事件,通知所有...

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

    下面将详细介绍这两个关键组件以及如何使用它们来实现观察者模式。 1. `Observer`接口: - `Observer`接口提供了`update`方法,当被观察的对象状态发生变化时,该方法会被调用。通常,观察者会在这个方法中执行...

    观察者模式 c++ 实现

    在C++中实现观察者模式,通常涉及以下几个关键概念: 1. **主题(Subject)**:主题是被观察的对象,它维护着一个观察者列表,并负责在状态变化时通知这些观察者。在C++中,主题通常是一个类,拥有添加、删除观察者...

    用C#实现观察者模式

    在C#中,我们可以利用.NET框架提供的事件和委托机制来实现观察者模式。本文将深入探讨如何使用C#来实现这一模式。 首先,我们需要理解观察者模式的基本组件:主题(Subject)和观察者(Observer)。主题是被观察的...

    java观察者模式观察者模式

    观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象...在实际开发中,理解并合理运用观察者模式,能够有效地实现对象之间的交互和通信,提升代码的灵活性和可维护性。

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

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

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

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

    56丨观察者模式(上):详解各种应用场景下观察者模式的不同实现方式1

    观察者模式的实现方式有很多种,根据不同的应用场景和需求,可以有完全不同的实现方式。下面是一种经典的实现方式: ```java public interface Subject { void registerObserver(Observer observer); void ...

    设计模式-观察者

    在Java中,`java.util.Observable` 和 `java.util.Observer` 类为实现观察者模式提供了基础支持。 1. **主题(Subject)**:主题是被观察的对象,它可以是抽象的或具体的。主题维护了一个观察者列表,并提供了添加...

    一个类实现Android观察者模式(最简单实用的观察者模式)

    如何实现观察者模式 #### 3.1 创建被观察者(Observable) 首先,你需要创建一个被观察的对象,这个对象通常会包含一个或多个可观察的状态变量。在Android中,可以自定义一个类,并添加`Observer`接口的实现,...

    观察者模式C++实现

    在C++中实现观察者模式,我们可以遵循以下步骤: 1. **定义主题(Subject)角色**:这是被观察的对象,它维护了一个观察者列表,并提供添加、删除观察者和通知观察者的接口。在C++中,可以使用STL容器如`std::...

Global site tag (gtag.js) - Google Analytics