当项目一启动就需要初始化一些信息,可以用spring封装的继承java的监听器接口来实现。但是网上很多文章写的过于复杂太绕了。
没有深入事情的本质,或者说没有开始去简单的来想这件事情,导致听到监听器这三个字就很懵逼。因为程序是顺序编写而且顺序执行的,一旦牵涉到监听啊回调啊等等概念就感觉不是那么容易理解了。
首先你要明确一个事情,在java世界里,无论一个设计模式或者一个概念多么复杂。用代码实现的话就那么几种组合关系。
纵向的话就是继承和实现 这个没什么好说的。
横向的话就多了,什么依赖 组合 聚合 关联。这四种关系无非就是类与类之间进行引用。代码上有细微差别,需要在具体语义中分析。
比如一个service引用另外一个service是什么,这个我们经常干。是依赖。为什么我依赖你服务的某个方法 你的方法变了我肯定调用也变了。
在Java中,关联关系一般使用成员变量来实现。比如我们经常干的 主表和明细表的实体类关联 主表实体类有明细表的成员变量。
聚合和关联从代码层面没什么区别。只能从语义来区分,比如一个家庭实体类 有孩子集合 有空调实体类
这些成员变量聚合成一个家庭 但是不一定非要有空调
组合关系一般是强依赖,强聚合,比如人有眼睛 有鼻子 有耳朵 这些在人初始化的时候必须作为成员变量new好
参考博客具体你们可以看一下 https://www.2cto.com/kf/201712/706423.html
说了这么多 我想表达的是不要被概念所迷惑了 什么设计模式 再好看的房子不要砖头堆在一起?
好了 监听器开始说了
我喜欢玩云顶之弈
假如我跟神超排在一起了。当前版本狂野刺非常火热 双无尽阿卡丽打爆全场。
那么就设计一个 监听神超抽到阿卡丽以后就提醒我 我好随时换阵容。
首先肯定要有个玩家对象 代表神超正在刷新卡牌。这个玩家对象就叫事件源
简化版代码如下 这段代码非常简单 假设随机数是3就代表抽到阿卡丽。用sout来代表通知。
肯定还要有个监听对象 作为接受者 接受玩家对象抽到阿卡丽以后提醒我
定义一个接口 并且实现它
到这里 两个类都定义好了
回到之前说的类与类之间关系,实际情况肯定不能用sout来代表消息传递。那么怎么做。关联起来就行了。
你会发现notifyOther这个方法多了一个参数 这个参数就是事件对象 因为你总得传点什么东西进去吧
比如这个参数含有当前玩家的姓名啊等等之类的 这里直接对玩家对象包了一层 当然实际情况里面放什么都可以