五:观察者模式

以下demo 含义:
如果小孩儿哭了,父母需要做出反应,所以父母需要监视小孩哭的动作。
比如有个app,父母在app订阅,小孩哭这个动作会推送一个消息。父母接收到了这个消息作出反应。



@Data
public class Event {

    private int msg;
}

public class Child {

    public void cry(int message) {
        System.out.println("小孩醒了");
        Event event = new Event();
        event.setMsg(message);
       // 小孩哭了向app推送消息
        ObserverListenerUtil.pushEvent(event);
    }
}

// 监听者接口
public interface ObserverListener {

    void doSomeThing(Event event);
}

// 父亲监听后实现
public class Dad implements ObserverListener {
    @Override
    public void doSomeThing(Event event) {
        if (event.getMsg() == 1) {
            System.out.println("dad feeds");
        }
    }
}

// 母亲监听后实现
public class Mom implements ObserverListener {
    @Override
    public void doSomeThing(Event event) {
        if (event.getMsg() == 2) {
            System.out.println("mom feeds");
        }
    }
}

// app ,收集所有订阅消息的监听者
public class ObserverListenerUtil {

    static List listenerList = Lists.newArrayList();


    public static void register(ObserverListener observerListener) {
        listenerList.add(observerListener);
    }

// 向每个监听者推送消息
    public static void pushEvent(Event event) {

        listenerList.stream().forEach(item -> item.doSomeThing(event));

    }
}


//测试demo
public class ObserverDemo {
    public static void main(String[] args) {

        ObserverListenerUtil.register(new Dad());
        ObserverListenerUtil.register(new Mom());

        Child child = new Child();
        child.cry(1);

        System.out.println("----");

        child.cry(2);
        child.cry(1);


    }
}

你可能感兴趣的:(五:观察者模式)