美文网首页
观察者模式

观察者模式

作者: SunnyGL | 来源:发表于2019-08-05 22:33 被阅读0次

记得高一那会,我是我们组的组长,我们座位是那种七八个人围在一起拼成一张大桌子的那种(课间可以把书一撤,直接摆瓜子零食high起来,哈哈)。

某天下午的自习课,外面知了声加一圈一圈慢悠悠旋转的风扇使得人有些心烦意乱,我们组的张某人瞥了我一眼,小声对我说了句:“组长,我睡了哈,班主任来了叫我。”“你妹的,一到自习课你就睡,期末考试又要拖我们组后腿。”我对这位张同学真的是实在没办法,班级倒数,我话还没说完,他就已经趴头睡了。这时,我旁边的王同学把没做完的习题一摊,歪过头用她水汪汪的大眼睛看着我:“我也睡一会哈,班主任来了记得叫我。”我每天面对着这群不思进取的组员,真的是恨铁不成钢,每天想着法儿希望组员之间能够互帮互助,共同进步,结果就是肯努力的仍然继续努力,该混吃等死的还是在混吃等死。

过了许久,只见窗户外有一个穿着黑衣服的中年男人径直向教室走过来,我敏锐的觉察到肯定是班主任来了,我赶紧忙戳王同学和张某人:“班主任来了!”

课间————
”组长,刚才自习课多亏了您老人家,这包辣条分你一半,算我孝敬你的。“
”唉,你们能少睡点觉,成绩能提高一点,就不至于太拖小组平均分了。“
”组长,我保证下次一定不睡了好不好?好好学习,向组长您看齐!“

如今细想起来,上面这段记忆,正符合设计模式中的《观察者模式》呀,下面就用代码去描述一下上面的观察者模式。

1.我要把班主任来了这个事件告知张某人和王同学,首先定义一个事件回调接口。

/**
 * “班主任来了”事件回调接口
 */
public interface TeacherComeListener {

    /**
     * 班主任来啦
     */
    void onTeachCome(String msg);
}

2.接下来实现张某人和王同学对象类,他们都需要知道班主任来了这个事件,自然要实现TeacherComeListener接口。

/**
 * 张同学
 */
public class ZhangStudent implements TeacherComeListener{

    // 姓名
    private String name;

    public ZhangStudent(String name) {
        this.name = name;
    }

    @Override
    public void onTeachCome(String msg) {
        System.out.println(name + ":" +  msg);
    }
}

/**
 * 王同学
 */
public class WangStudent implements TeacherComeListener {

    // 姓名
    private String name;

    public WangStudent(String name) {
        this.name = name;
    }

    @Override
    public void onTeachCome(String msg) {
        System.out.println(name +":" + msg);
    }
}

3.张某人和王同学都对组长说了,让我在班主任来了第一时间叫醒他们,那我就应该持有他们实现的TeacherComeListener接口,下面是组长类。

public class GroupLeader {

    private List<TeacherComeListener> listenerList = new ArrayList<>();

    public GroupLeader() {
    }

    /**
     * 组员告诉组长,班主任来了通知一下
     * @param listener 组员实现的事件回调接口
     */
    public void regist(TeacherComeListener listener) {
        listenerList.add(listener);
    }

    /**
     * 通知张某人和王同学
     */
    public void notifyTeachComeEvent(){
        for (TeacherComeListener listener : listenerList) {
            listener.onTeachCome("班主任来啦!");
        }
    }
}

4.最后我们写代码测试一下

public class Test {
    public static void main(String[] args){

        // 张某人
        ZhangStudent zhangStudent = new ZhangStudent("张某人");
        // 王同学
        WangStudent wangStudent = new WangStudent("王同学");
        // 组长
        GroupLeader groupLeader = new GroupLeader();

        // 张某人对组长说,班主任来了叫我哈
        groupLeader.regist(zhangStudent);
        // 王某人对组长说,班主任来了叫我哈
        groupLeader.regist(wangStudent);

        // 过了一会,班主任来啦,组长快叫醒组员
        groupLeader.notifyTeachComeEvent();
    }
}

打印结果:

张某人:班主任来啦!
王同学:班主任来啦!

尾巴:
送上一张UML图,希望能够更加直观的理解观察者模式。

观察者模式.png

相关文章

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • 观察者模式

    观察者模式概念 观察者模式是对象的行为模式,又叫作发布-订阅(publish/subscrible)模式。 观察者...

  • 设计模式-观察者模式

    观察者模式介绍 观察者模式定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

  • iOS设计模式之观察者模式

    观察者模式 1、什么是观察者模式 观察者模式有时又被称为发布(publish)-订阅(Subscribe)模式、模...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

  • RxJava(二)

    一、观察者模式 1.1、传统的观察者模式 1.2、RxJava 的观察者模式 区别传统的观察者模式是一个 Obse...

网友评论

      本文标题:观察者模式

      本文链接:https://www.haomeiwen.com/subject/xpzvdctx.html