设计模式理解 - 伟大的【Observer 观察者模式】

某些物件的状态变化会自动通知观察者。

它实现一种“ 订阅、观察、通知”的效果。

但这些物件需要继承 Observable  类,观察者需要继承 Observer 接口。

以下是 Java 代码:

// 产品类 可供Jsp直接使用UseBean调用 该类主要执行产品数据库插入 更新
public   class  product  extends  Observable{ 

  
private  String name;
  
private   float  price;

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

  }   

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

  }

  
// 以下可以是数据库更新 插入命令.
   public   void  saveToDb(){
  设计模式理解 - 伟大的【Observer 观察者模式】设计模式理解 - 伟大的【Observer 观察者模式】设计模式理解 - 伟大的【Observer 观察者模式】设计模式理解 - 伟大的【Observer 观察者模式】设计模式理解 - 伟大的【Observer 观察者模式】设计模式理解 - 伟大的【Observer 观察者模式】设计模式理解 - 伟大的【Observer 观察者模式】

}

// 观察者NameObserver主要用来对产品名称(name)进行观察的
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主要用来对产品价格(price)进行观察的
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(
" 橘子红了 " );
product.setPrice(
9.22f ); 

  }

}

你会在发现下面信息::

NameObserver :name changet to 橘子红了

PriceObserver :price changet to 9.22

这说明观察者在行动了.!!

你可能感兴趣的:(observer)