在这篇博文中,本人要讲解一种Java程序中很重要的一种设计模式——侦听者模式,通过这个模式,我们可以通过生成匿名内部类,来直接生成并且使用接口的对象。如果能够直接使用的话,我们在别的方法中要调用一个接口的方法时就非常容易了。那么,开始我们这篇博文的主题吧。
本人先来给出一个接口:
package com.mec.about_listener.core;
public interface IMecListener {
void somethingHappening(String message);
}
可以看得到,在这个接口中,本人只给出了一个没有实现的方法。
那么,现在,本人来给出一个类,在这个类中,本人将一个方法的参数设为上面定义的接口的类型
package com.mec.about_listener.core;
public class MecMainClass {
private String someMessage;
//注意:本人在这里给了一个类型为 接口类型 的成员
private IMecListener listener;
public MecMainClass(String someMessage) {
this.someMessage = someMessage;
}
private void doSomething() {
if (listener == null) {
return;
}
//这里调用了接口中的 方法
listener.somethingHappening(someMessage);
}
public void fun() {
doSomething();
}
public void addListener(IMecListener listener) {
this.listener = listener;
}
}
现在,本人再来调用一下这个类,展现下 “侦听者模式” 的基本使用方法:
package com.mec.about_listener.core;
public class Demo {
public static void main(String[] args) {
MecMainClass one = new MecMainClass("这里new了一个上面编写的类的对象");
//下面的代码要格外注意:调用上面那个类的方法时,我们通过 new的一个实现了接口的类的对象 作为参数
one.addListener(new IMecListener() {
//因为我们要实现这个接口,所以要实现这个接口中的所有抽象方法
@Override
public void somethingHappening(String message) {
System.out.println("这里实现了接口: " + message);
}
});
//上面的参数,实质上是 生成了一个匿名内部类
//这里就是调用我们在上面实现的接口的类的对象的方法
one.fun();
}
}
那么,现在,本人来展示一下运行结果:
这个设计模式其实算是非常基础的一种设计模式了,但是还是颇具技巧性的,而且它可以直接实现生成接口 的对象,非常方便。
而且,我们可以通过这个设计模式,在面对不同的事件时,采取不同的对应手段。
我们也能隐隐感觉到,这个设计模式,有点像本人《数据结构与算法》专栏中的博文——《指向函数的指针——消费未来》中所讲解的知识点。
其实,这是因为用到了接口,而在本人的同专栏博文《接口》中就曾提到过,接口拥有四大基本作用:
1.消费未来
2.海纳百川
3.开闭原则
4.分类
而在本人这篇博文中讲解的——侦听者模式,就主要应用了接口的第一点基本作用。由此可见,接口的知识,在我们现在的知识水平来看,还是十分浅薄的。
关于这个设计模式的原理,将会在本人下篇博文中应用到,甚至在本人未来的博文中也会被频繁使用。
那么,本篇博文的全部内容本人就讲解完成了。
若对这篇博文有任何疑问或者意见以及建议,请在下方评论区提出,本人将尽早予以讲解以及答复,喜欢的同学请留下你们的赞,谢谢!!!