设计模式--观察者模式

来源:互联网 发布:rf3148编程器 编辑:程序博客网 时间:2024/04/24 03:40

看了下设计模式,在网上找了些代码,自己动手调试了下,达到了想要的效果,放在这里了。

NameObserver.java程序

package observer;

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

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);

 }
}
}

 

 

PriceObserver.java程序

package observer;

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

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);

 }

 }
}

 

Product.java程序

package observer;

import java.util.Observable;

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("in the saving");
     }
}

Test.java程序

package observer;

public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Product product=new Product();
  NameObserver nameobs=new NameObserver();
  PriceObserver priceobs=new PriceObserver();
//  加入观察者
  product.addObserver(nameobs);
  product.addObserver(priceobs);
  
  product.setName("橘子红了");
  product.setPrice(9.22f);
 }

}

 

原创粉丝点击