观察者模式

观察者模式是程序设计中用得非常多的一种设计模式之一,如按钮的单击事件就是使用了观察者模式,在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。

 

在java中的gui编程中,典型的事件模型包括:事件对象,事件源对象,事件监听对象,与观察者模式的角色对应如下:

事件源对象:----->被观察的对象

事件监听对象:----->观察的对象

事件对象:---->被观察者告诉观察者某件事情发生了,事件对象中包括了一些有用的信息

 

 

先用生活中例子说明.

一个漂亮的女孩身边不乏男孩子的追求,这些男孩子都时时刻刻想了解女孩子的状况,如现在的地点,现在心情怎么样..

由于女孩子都比较善良,不忍心伤害这些追求者,所以隔一段时间就像追求者发送自己的状况,所以女孩子非常的苦恼。。。

现在讲我们的观察者模式运用到这个实例上面。

 

1、事件对象:(EmotionEvent) 继承EventObject

public class EmotionEvent extends EventObject
{

	//自定义一个事件,其中source是事件源对象
	public EmotionEvent(Object source)
	{
		super(source);
		// TODO Auto-generated constructor stub
	}

}

 

2、监听器接口(EmotionListener)继承了EventListener

 

import java.util.EventListener;
public interface EmotionListener extends EventListener
{
	public void update(EmotionEvent event);
}


3、女孩对象(被观察者)

 

public class Girl
{
	private List<EmotionListener> listener=new ArrayList<EmotionListener>();
	
	private String name;

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}
	
	public void addListener(EmotionListener lis)
	{
		listener.add(lis);
	}
	
	public void removeListener(EmotionListener lis)
	{
		listener.remove(lis);
	}
	
	public void notify(EmotionEvent event)
	{
		for(EmotionListener lis:listener)
		{
			lis.update(event);
		}
	}
	
	
}


 

4、男孩对象(观察者)

public class Boy implements EmotionListener
{

	@Override
	public void update(EmotionEvent event)
	{
		// TODO Auto-generated method stub
		Girl girl=(Girl)event.getSource();
		System.out.println(girl.getName()+","+"你有什么不开心的,说出来让我开心一下。");
	}

}


5、测试

public class Test
{
	
	public static void main(String[] args)
	{
		Girl girl=new Girl();
		girl.setName("aviva");
		EmotionEvent event=new EmotionEvent(girl);
		Boy boy1=new Boy();
		Boy boy2=new Boy();
		
		girl.addListener(boy1);
		girl.addListener(boy2);
		
		girl.notify(event);
	}
}


通过上面的实例,与Button的单击事件练习起来,可以对按钮的单击事件有个很好的理解的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值