Chinaunix首页 | 论坛 | 博客
  • 博客访问: 112763
  • 博文数量: 19
  • 博客积分: 419
  • 博客等级: 一等列兵
  • 技术积分: 265
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-03 20:13
文章分类

全部博文(19)

文章存档

2012年(6)

2011年(13)

分类: Java

2011-11-08 14:28:23

1.静态main所在类
package com;
public class Test {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Product prdt=new Product(100);
  
  System.out.println("老的价格是"+prdt.getPrice());
  prdt.changePrice(800);
  prdt.changePrice(900);
  
  
 }
}
2.Observable类

package com;

import java.util.Observable;

public class Product extends Observable{

 private float price;
 SMSSendObserver so ;
// EmailSendObserver eo;
  
 

 public Product(float price) {
  super();
  this.price = price;
  so = new SMSSendObserver();
//  eo = new EmailSendObserver();
  this.addObserver(so);
//  this.addObserver(eo);
  
 }
 
 public void changePrice(float price)
 {
  if(this.price!=price)
  {
   this.price = price;
   
   setChanged(); 
  }
  notifyObservers();  
 }

 public float getPrice() {
  return price;
 }

 public void setPrice(float price) {
  this.price = price;
 }

}

3.Observer类

package com;

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

public class SMSSendObserver implements Observer{


// public SMSSendObserver(Product prt) {
//  super();
//  prt.addObserver(this);
//  // TODO Auto-generated constructor stub
// }

 @Override
 public void update(Observable product, Object arg) {
  // TODO Auto-generated method stub\
  System.out.println("SMSSendObserver得到的价格是"+((Product)product).getPrice()+"");
  ((Product)product).changePrice(300);
  
 }
 


}
4.总结

(1)被调对象继承Observable类,为观察客体,主调对象实现Observer,为观察主体。观察客体里面声明观察主体,一旦观察客体成员变化,则通知观察主题做相应的改变。通过Observable来循环通知(setchanged(),notifyObservers()),Observer只是调用相应的改变方法update。

(2)应用在变化需要通知其他的引用对象修改的场景。

阅读(1531) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:java设计模式——State模式

给主人留下些什么吧!~~