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();
}
}
}
}
点击了Button!
点击了TextView!
首先我们定义一个View(即观察者),类里面addListener是添加被观察者的方法,然后增加click方法,里面的操作很简单,就是循环所有被观察者,调用onClick方法,这样每次增加一个对象,就实现Listener类,就可以在不改变原有逻辑的情况下增加被观察者,达到了对象间的解耦。
如果想自定义一个事件,使用观察者模式是一个不错的选择,android客户端的ListView的实现,其中就采用了观察者模式。
定义:一种对象对另一种对象存在某种依赖关系,当一个对象发生改变的时候,需要改变另一个对象的状态。
在设计一个系统的时候,经常会有这样一个需求,如果一个对象发生改变,需要改变另一个对象的数据。比如: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种设计模式九(连载)
- java23种设计模式十二(连载)
- java23种设计模式十(连载)
- java23种设计模式三(连载)
- java23种设计模式七(连载)
- java23种设计模式十三(连载)
- java23种设计模式十四(连载)
- java23种设计模式二(连载)
- java23种设计模式十一(连载)
- java23种设计模式八(连载)
- java23种设计模式四(连载)
- java23种设计模式一(连载)
- java23种设计模式五(连载)
- 追MM与JAVA23种设计模式
- 追MM与Java的23种设计模式
- Java设计模式圣经连载(03)-抽象工厂模式
- java关于23种设计模式的有趣见解
- 追MM与Java的23种设计模式
- Java设计模式圣经连载(01)-简单工厂模式
- 追MM与Java的23种设计模式