观察者模式
意图:
定义了对象之间的一对多依赖
当一个对象状态改变时,它的所有依赖者都会收到通知并自动更新。
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);
}
}