观察者设计模式

前言:

  从现实角度来说,我们每一个人都是一个观察者,同时也是一个被观察者。

  作为被观察;者,我们会发出一些信息,观察者在接收到这些信息后,会做出相应的反映;而作为观察者,我们是可以被“被观察者”所发出的信息影响的。

  一个被观察者,可能存在多个观察者。也就是说,一个被观察者所发出的信息,可能会影响到多个观察者。

  观察者设计模式:

    定义了一种一对多的关联关系。一个对象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("你好世界!");
    }
}

测试结果:

 

posted @ 2020-12-18 22:38  Java小白的搬砖路  阅读(137)  评论(0编辑  收藏  举报