监听者模式/观察者模式

在这篇博文中,本人要讲解一种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.分类
而在本人这篇博文中讲解的——侦听者模式,就主要应用了接口的第一点基本作用。由此可见,接口的知识,在我们现在的知识水平来看,还是十分浅薄的。

关于这个设计模式的原理,将会在本人下篇博文中应用到,甚至在本人未来的博文中也会被频繁使用。

那么,本篇博文的全部内容本人就讲解完成了。
若对这篇博文有任何疑问或者意见以及建议,请在下方评论区提出,本人将尽早予以讲解以及答复,喜欢的同学请留下你们的赞,谢谢!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值