设计模式(Javaee)之---监听者模式

监听者模式

一、

监听者模式也叫观察者模式

监听器Listener

监听器-就是一个实现待定接口的普通Java程序,此程序专门用于监听别一个类的方法调用。
都是使用观察者设计模式。
什么是观察者模式:
定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。 
示例:
GUI编程中的addXxxxListener都是观察者模式。


观察者模式的三个重要类:


观察者设计模式示例:

1、开发步骤:
 * 第一步:实现一个需要被监听的类Person.
 * 第二步:实现一个监听接口PersonListener。
 * 第三步:在Person类中,提供一个方法用于注册PersonListener类,即registerListener
 * 第四步:必须要在Person类中维护PersonListener类的实例。
 * 第五步:在调用person.eat方法是,判断PersonListener是否为null,如果不为null则调用它的eating方法。
 * 第六步:在Main类中,实例化Person,并注册一个监听。

被监听者Person

package cn.hncu.designPattern;

public class Person {
	private String name;
	private IPersonRunListener listener1;
	private IPersonRunListener listener2;
	public Person(String name) {
		this.name = name;
	}

	public void run() {
		if(listener1!=null){
			listener1.fighting();
		}
		System.out.println(this.name + " is running....");
		if(listener2!=null){
			listener2.fighting();
		}
	}
	
	public void addBefore(IPersonRunListener listener){
		this.listener1 = listener;
	}
	public void addAfter(IPersonRunListener listener){
		this.listener2 = listener;
	}
	
}

interface IPersonRunListener {
	public void fighting();
}
监听者

package cn.hncu.designPattern;

public class Demo {

	public static void main(String[] args) {
       Person p = new Person("Jack");
       IPersonRunListener a = new A();
       p.addAfter(a);
       p.addBefore( new IPersonRunListener() {
			@Override
			public void fighting() {
				System.out.println("注意做点准备活动....");
			}
	   });
       p.run();
	}
}

class A implements IPersonRunListener{
	@Override
	public void fighting() {
		System.out.println("加油...做死的跑...");
	}
}


2、开发步骤:
第一步:前页改Person为Cat的基础上继续添加一个CatEvent类(注意我说是类不是接口),代表事件对像。
第二步:修改ICatListener接口的climbing方法,让它接收一个 CatEvent参数。
第三步:在Cat类climbing方法中,如果判断ICatListener属性不为空,则在调用climbing方法,实例化 CatEvent并传给climbing方法。
第四步:在main方法中,通过 CatEvent的getSource方法测试是否是同一个对像。
package cn.hncu.designPattern.two;

public class Cat {
	private ICatListener listener = null;
	private String name;
	public Cat(String name) {
		
		this.name = name;
	}
	
	public String getName() {
		return name;
	}

	public void climb() {
		System.out.println(name+"正在爬.....");
		if (listener != null) {
			listener.help(new CatEvent(this));
		}
	}

	public void addCatListener(ICatListener listener) {
		this.listener = listener;
	}

	@Override
	public String toString() {
		return name;
	}
	
}

interface ICatListener {
	public void help(CatEvent e);
}

class CatEvent {
	private Cat cat = null;

	public CatEvent(Cat cat) {
		this.cat = cat;
	}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值