Laughing

 

观察者模式

意图:

        定义了对象之间的一对多依赖

        当一个对象状态改变时,它的所有依赖者都会收到通知并自动更新。

UML图:

先建立一个主题: (本来要给主题、观察者建立接口的,这里偷懒了)

import java.util.*;

public class subject 

{

   int v=0;

   private List<observer> a=new ArrayList<observer>();

   

   void add(observer o)

   {

  a.add(o);

   }

   void delete(observer o)

   {

  a.remove(o);

   }

   public void noti()

   {

  Iterator<observer> itr=a.iterator();

  while(itr.hasNext()) itr.next().update(v);

   }

   void set(int v)

   {

  if(this.v!=v) {this.v=v;noti();}     //推的方式

   }

}

再建立一个观察者:
 

public class observer //extends ob

{

void registor(subject sub){sub.add(this);}

    public void update(int value){System.out.println("主题已变为:"+value);}

}

可以再建立一个或者多个观察者(一般实现一个接口),没写了。
测试一下:
 
public class test
{
public static void main(String[] args)
{
        subject sub=new subject();
        observer ob=new observer();
        
        ob.registor(sub);
        sub.set(7);
        sub.delete(ob);//主题删除一个观察者,可以用一个函数将取消对一个主题的权利交给观察者本身,没有实现。
        sub.set(9);
}
}

posted on 2011-12-30 10:00  巨富一生  阅读(144)  评论(0编辑  收藏  举报

导航