码迷,mamicode.com
首页 > 编程语言 > 详细

java23种设计模式六(连载)

时间:2016-08-09 10:48:04      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

六、观察者模式

定义:一种对象对另一种对象存在某种依赖关系,当一个对象发生改变的时候,需要改变另一个对象的状态。

在设计一个系统的时候,经常会有这样一个需求,如果一个对象发生改变,需要改变另一个对象的数据。比如:android客户端的一个控件ListView,当数据发生改变的时候,我们需要通知对象,刷新当前控件。

观察者模式一般有以下四个角色:

观察者:作用是观察每个对象是否需要改变

被观察者:只是一个接口,观察者观察的接口

具体的被观察者:这个是观察者具体要观察的对象

说的比较抽象,具体我们看代码,这里以自定义事件的方法来描述:

public class View {

	private List<Listener> listeners = new ArrayList<>();
	
	public void addListener(Listener listener){
		listeners.add(listener);
	}
	
	public void removeListener(Listener listener){
		listeners.remove(listener);
	}
	
	public void click(){
		if(null != listeners && listeners.size() > 0){
			for(Listener listener : listeners){
				listener.onClick();
			}
		}
	}
	
}

public interface Listener {

	public void onClick();
}

public class Button implements Listener {

	@Override
	public void onClick() {
		System.out.println("点击了Button!");	
	}

	
}

public class TextView implements Listener {

	@Override
	public void onClick() {
		System.out.println("点击了TextView!");
	}

}

public static void main(String[] args) {
		View view = new View();
		view.addListener(new Button());
		view.addListener(new TextView());
		view.click();
	}
测试类添加了两个被观察者:Button和TextView,调用click方法,则同时触发了Button和TextView:

点击了Button!
点击了TextView!

首先我们定义一个View(即观察者),类里面addListener是添加被观察者的方法,然后增加click方法,里面的操作很简单,就是循环所有被观察者,调用onClick方法,这样每次增加一个对象,就实现Listener类,就可以在不改变原有逻辑的情况下增加被观察者,达到了对象间的解耦。

如果想自定义一个事件,使用观察者模式是一个不错的选择,android客户端的ListView的实现,其中就采用了观察者模式。

java23种设计模式六(连载)

标签:

原文地址:http://blog.csdn.net/lynnlovemin/article/details/52159748

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!