`

java 观察者设计模式

阅读更多

设计思想:

   观察者模式定义了对象之间的一对多的依赖关系,当一个对象的状态发生改变时,所有它的依赖对象将被自动通知并更新
第一种方式,采用API提供的接口和类来实现:

网上商店中的商品在名称、价格发生变化时,必须自动通知会员,Java的API为我们提供了
Observer接口和Observable类来实现所谓观察者模式。

  Observable(可观察者)类允许在自身发生改变时,通知其它对象(实现接口Observer,观察者)。
  下面是一个可观察者(产品类):

import java.util.*;
public class product extends Observable{ 
   private String name;////产品名
   private float price;////价格

   public String getName(){ return name;}
   public void setName(String name){
    this.name=name;
   ////设置变化点 
    setChanged();
    notifyObservers(name);////通知观察者

   }   

   public float getPrice(){ return price;}
   public void setPrice(float price){
    this.price=price;
   ////设置变化点
    setChanged();
    notifyObservers(new Float(price)); 

   }

 

   ////以下可以是数据库更新 插入命令.
   public void saveToDb(){
   System.out.println("saveToDb");
    }

}

下面是两个观察者:
import java.util.*;
public class NameObserver implements Observer{

   private String name=null;
   public void update(Observable obj,Object arg){
     if (arg instanceof String){
      name=(String)arg;
      ////产品名称改变值在name中
      System.out.println("NameObserver :name changet to "+name);

     }

       }
   }

import java.util.*;
public class PriceObserver implements Observer{
   private float price=0;
   public void update(Observable obj,Object arg){
     if (arg instanceof Float){

      price=((Float)arg).floatValue();
  
      System.out.println("PriceObserver :price changet to "+price);

     }


   }

}
下面是测试类:
public class Test {

   public static void main(String args[]){
     Product product=new Product();
     NameObserver nameobs=new NameObserver();
     PriceObserver priceobs=new PriceObserver();

     ////加入观察者
     product.addObserver(nameobs);
     product.addObserver(priceobs);

     product.setName("applet");
     product.setPrice(9.22f); 

   }
}
运行结果:
C:\java>java   Test
NameObserver :name changet to applet
PriceObserver :price changet to 9.22

C:\java>

 

第二种方式:手动写类和接口。

观察者接口代码:

package observer;

public interface Observer {

	//所有观察者需要实现的方法。通知观察者的方法
	public void update(String obj);
	
}

 名称观察者,该类实现了上面的接口:

package observer;

public class NameObserver implements Observer {

	public void update(String obj) {
		String prefix = obj.substring(0,5);
		obj = obj.substring(5);
		if(prefix.equals("name:")){
			System.out.println("名称改变了! 当前的名称是:"+obj);
		}

	}

}

  价格观察者,该类实现了上面的接口:

package observer;

//观察者的实现类
public class PriceObserver implements Observer{

	
	//观察者收到信息时需要处理的动作.
	public void update(String obj) {
		String prefix = obj.substring(0,6);
		obj = obj.substring(6);
		if(prefix.equals("price:"))
			System.out.println("价格改变了!当前的价格是:"+obj);
	}
}

 

 

产品类:

package observer;

import java.util.*;
public class Product {

	private ArrayList obs = null;
	private String price = null;
	private String name = "";
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		if(this.name != name){//价格改变的时候才通知
			this.name = name;
			notifyObserver("name:"+this.name);//通知所有的观察者
		}
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		if(this.price != price){//价格改变的时候才通知
			this.price = price;
			notifyObserver("price:"+this.price);//通知所有的观察者
		}
	}
	public Product(){
		obs = new ArrayList();
		
	}
	//注册观察者
	public void addObserver(Observer o){
		if(!obs.contains(o))
		{
			obs.add(o);
		}	
	}
	//删除注册者
	public void deleteObserver(Observer o){
		if(obs.contains(o))
		{
			obs.remove(o);
		}
	}
	//通知所有的观察者.
	public void notifyObserver(String obj){
		Iterator it = obs.iterator();
		while(it.hasNext()){
			Observer ob = (Observer) it.next();
			ob.update(obj);
		}
	}
}

 

测试类:

package observer;

public class TestObserver {

	/**
	 * 观察者测试类
	 */
	public static void main(String[] args) {
		Product p = new Product();
		Observer ob1 = new PriceObserver();
		Observer ob2 = new NameObserver();
		
		//注册观察者
		p.addObserver(ob1);
		p.addObserver(ob2);
		
		//被观察者的价格改变了。
		p.setPrice("98");
		
		p.setPrice("98");//注意这行看看会不会被通知
		
		p.setName("Dell studio 1535笔记本");

	}

}

 

测试结果:

 

价格改变了!当前的价格是:98
名称改变了! 当前的名称是:Dell studio 1535笔记本

 

分享到:
评论

相关推荐

    java观察者设计模式demo源码

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

    Java观察者设计模式详解

    Java观察者设计模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件处理系统,将观察者与被观察对象解耦,使得...

    java观察者模式观察者模式

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

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

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

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

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

    Java内置观察者模式

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它允许一个对象,当其状态发生改变时,能够自动通知所有依赖它的其他对象。在Java中,这种模式已经被内置到语言核心,使得开发者可以轻松地实现事件驱动...

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

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

    java观察者模式Demo

    观察者模式是软件设计模式中的一种行为...总的来说,"java观察者模式Demo"提供了一个使用Java标准库实现观察者模式的例子,这对于学习和理解设计模式是非常有帮助的,同时通过自定义实现还能进一步深入理解其工作原理。

    java设计模式之观察者模式

    在实际应用中,观察者模式不仅可以用于简单的状态变更通知,还可以与其他设计模式结合,如策略模式、工厂模式等,以应对更复杂的场景。同时,Java 8引入了流(Stream)和函数式编程概念,提供了更高级的事件处理方式...

    java观察者模式实例

    总结来说,这个"java观察者模式实例"帮助我们理解如何在实际项目中应用观察者模式,以及如何利用Java的`Observable`和`Observer`接口来实现。通过这个实例,我们可以更好地掌握Java的继承和多态特性,提升软件设计的...

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

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

    Java观察者模式代码全解析

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

    Java 观察者模式的浅析

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

    java 观察者模式 demo

    以下是一个简单的Java观察者模式的示例: ```java import java.util.Observable; import java.util.Observer; class WeatherData implements Observable { private float temperature; private float humidity; ...

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

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

    java中监听机制,以及观察者设计模式

    Java中的监听机制与观察者设计模式是编程中重要的概念,它们在软件开发中扮演着关键的角色,尤其是在构建可扩展和可维护的系统时。这里,我们将深入探讨这两个主题,并通过实例来阐述它们的工作原理和应用。 首先,...

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

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

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

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

    java 了解观察者模式

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

Global site tag (gtag.js) - Google Analytics