1. package cn.lxl.observe; 
  2.  
  3. /** 
  4.  * Created by IntelliJ IDEA. 
  5.  * User: Administrator 
  6.  * Date: 2011-11-11 
  7.  * Time: 15:30:25 
  8.  * To change this template use File | Settings | File Templates. 
  9.  */ 
  10. //抽象主题 
  11. public interface AbstractMotif { 
  12.  
  13.     public void addAbstractMotif(AbstractWatcher abstractWatcher); 
  14.  
  15.     public void removeAbstractMotif(AbstractWatcher abstractWatcher); 
  16.  
  17.     public void notifyAbstractMotif(String message); 

 

   
   
   
   
  1. package cn.lxl.observe; 
  2.  
  3. /** 
  4.  * Created by IntelliJ IDEA. 
  5.  * User: Administrator 
  6.  * Date: 2011-11-11 
  7.  * Time: 15:33:19 
  8.  * To change this template use File | Settings | File Templates. 
  9.  */ 
  10. public interface AbstractWatcher { 
  11.     public void update(String message); 

 

   
   
   
   
  1. package cn.lxl.observe; 
  2.  
  3. /** 
  4.  * Created by IntelliJ IDEA. 
  5.  * User: Administrator 
  6.  * Date: 2011-11-11 
  7.  * Time: 15:46:47 
  8.  * To change this template use File | Settings | File Templates. 
  9.  */ 
  10. public class ConWatcher implements AbstractWatcher { 
  11.     // 定义每一个观察者名字 
  12.     private String name; 
  13.  
  14.     public ConWatcher(String name) { 
  15.         this.name = name; 
  16.     } 
  17.  
  18.     public void setName(String name) { 
  19.         this.name = name; 
  20.     } 
  21.  
  22.     public String getName() { 
  23.         return this.name; 
  24.     } 
  25.  
  26.     //接受信息 
  27.     public void update(String message) { 
  28.         System.out.println(message); 
  29.     } 

 

   
   
   
   
  1. package cn.lxl.observe; 
  2.  
  3. import java.util.ArrayList; 
  4. import java.util.List; 
  5.  
  6. /** 
  7.  * Created by IntelliJ IDEA. 
  8.  * User: Administrator 
  9.  * Date: 2011-11-11 
  10.  * Time: 15:31:26 
  11.  * To change this template use File | Settings | File Templates. 
  12.  */ 
  13. //具体主题 
  14. public class ConMotif implements AbstractMotif { 
  15.     //观察都列表 
  16.     List list = new ArrayList(); 
  17.  
  18.     // 增加观察者 
  19.     @Override 
  20.     public void addAbstractMotif(AbstractWatcher abstractWatcher) { 
  21.         list.add(abstractWatcher); 
  22.         ConWatcher con = (ConWatcher) abstractWatcher; 
  23.         String conName = con.getName(); 
  24.         System.out.println("增加了一个新观察者..." + conName); 
  25.     } 
  26.  
  27.     //删除观察者 
  28.     @Override 
  29.     public void removeAbstractMotif(AbstractWatcher abstractWatcher) { 
  30.         list.remove(abstractWatcher); 
  31.         ConWatcher con = (ConWatcher) abstractWatcher; 
  32.         String conName = con.getName(); 
  33.         System.out.println("删除了一个新观察者..." + conName); 
  34.     } 
  35.  
  36.     //观察者发送信息 
  37.     @Override 
  38.     public void notifyAbstractMotif(String message) { 
  39.         for (AbstractWatcher abstractWatcher : list) { 
  40.             ConWatcher con = (ConWatcher) abstractWatcher; 
  41.             String conName = con.getName(); 
  42.             abstractWatcher.update("现在还有:" + conName + "在" + message); 
  43.         } 
  44.     } 

 

   
   
   
   
  1. package cn.lxl.observe; 
  2.  
  3. /** 
  4.  * Created by IntelliJ IDEA. 
  5.  * User: Administrator 
  6.  * Date: 2011-11-11 
  7.  * Time: 15:48:29 
  8.  * To change this template use File | Settings | File Templates. 
  9.  */ 
  10. public class Test { 
  11.     public static void main(String[] args) { 
  12.         //生成一个具体的被观察对象 
  13.         ConMotif conMotif = new ConMotif(); 
  14.  
  15.         //生成观察者张三 
  16.         ConWatcher zsConWatcher = new ConWatcher("张三"); 
  17.  
  18.         //生成观察者李四 
  19.         ConWatcher lsConWatcher = new ConWatcher("李四"); 
  20.  
  21.         //生成观察者王五 
  22.         ConWatcher wwConWatcher = new ConWatcher("王五"); 
  23.  
  24.         //观察者观察具休珠对象 
  25.         conMotif.addAbstractMotif(zsConWatcher); 
  26.         conMotif.addAbstractMotif(lsConWatcher); 
  27.         conMotif.addAbstractMotif(wwConWatcher); 
  28.  
  29.  
  30.         conMotif.removeAbstractMotif(wwConWatcher); 
  31.  
  32.         conMotif.notifyAbstractMotif("观察我"); 
  33.     }