前言:
从现实角度来说,我们每一个人都是一个观察者,同时也是一个被观察者。
作为被观察;者,我们会发出一些信息,观察者在接收到这些信息后,会做出相应的反映;而作为观察者,我们是可以被“被观察者”所发出的信息影响的。
一个被观察者,可能存在多个观察者。也就是说,一个被观察者所发出的信息,可能会影响到多个观察者。
观察者设计模式:
定义了一种一对多的关联关系。一个对象A与多个对象B、C、D之间建立“被观察与观察关系”。
当对象A的状态发生改变时,通知所有观察者对象B、C. D。当观察者对象B、c、D在接收到A的通知后,根据自身实际情况,做出相应改变。
当然,观察者与被观察者指的都是具有某一类功能的对象、
结构说明:
代码:
IObserved:
public interface IObserved { /** * 接收数据信息 * @param demo */ void shuJu(String demo); }
IBeObserved:
public interface IBeObserved { /** * 添加观察者的方法 * @param observed */ void addObserved(IObserved observed); /** * 删除观察者的方法 * @param observed */ void removeObserved(IObserved observed); /** * 向观察者发送消息的方法 * @param data */ void sendObserved(String data); }
OneBeserved:
public class OneObserved implements IObserved { @Override public void shuJu(String demo) { System.out.println("一号观察者正在处理信息:" + demo); } }
TwoBeserved:
public class TwoObserved implements IObserved { @Override public void shuJu(String demo) { System.out.println("二号观察者正在处理信息:" + demo); } }
BeObserverSimp:
public class BeObserverSimp implements IBeObserved { /** * 定义观察者集合/ */ List<IObserved> list; public BeObserverSimp() { //在被观察者创建的时候,就创建观察者集合 list = new ArrayList<>(); } @Override public void addObserved(IObserved observed) { list.add(observed); } @Override public void removeObserved(IObserved observed) { list.remove(observed); } @Override public void sendObserved(String data) { //遍历集合调用每个观察者中的方法 for (IObserved observed : list) { observed.shuJu(data); } } }
测试类:
/** * @author zhangzhixi */ public class Test { public static void main(String[] args) { //创建观察者 OneObserved one = new OneObserved(); TwoObserved two = new TwoObserved(); //创建被观察者 BeObserverSimp bos = new BeObserverSimp(); //添加一号跟二号观察者 bos.addObserved(one); bos.addObserved(two); //删除一号观察者 bos.removeObserved(one); //向观察发送消息 bos.sendObserved("你好世界!"); } }