您的位置:首页 > 编程语言 > Java开发

java23种设计模式六(连载)

2016-08-09 09:56 435 查看
六、观察者模式

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

在设计一个系统的时候,经常会有这样一个需求,如果一个对象发生改变,需要改变另一个对象的数据。比如: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的实现,其中就采用了观察者模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 JAVA