科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道来自观察者模式中两个成员的经典对话

来自观察者模式中两个成员的经典对话

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

第二章中在讲到观察者模式的时候有段很经典的,是观察者模式中两个角色Subject跟Observer的对话。

作者:gaolin_bei 来源:CSDN 2008年2月27日

关键字: java 对话 观察者模式

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共3页)

举个小例子:

  ActionListener listener = new ActionListener() {

public void actionPerformed(ActionEvent actionEvent) {

   System.out.println("监听器收到通知!");

  }

};

  JButton button = new JButton("单击我!");

  button.addActionListener(listener);

   在这个例子中,button包括了维护一个监听器聚集类,并提供各种管理监听器对象聚集的方法,比如addActionListener等,可以看出上面的listener就是一个监听器对象它实现了ActionListener接口的actionPerformed方法,这时如果用户单击了button,就会激发actionPerformed方法,其实这里的actionPerformed就相当于Observer中的update()方法。

   在这里,我们实现一个监听器接口,将其附加到监听的对象上。监听的对象就是被监听的。它的职责是记住谁在监听,在JavaBeans组件模型中,用于附加和解除Observer对象的接口是添加和删除监听器命名模式。当监听对象的状态改变的时候,它会通知Observer对象。这种设计模式的一个主要目标就是将对象和观察者的耦合度降低。当JButton被选择的时候,并非调用一个叫做ButtonNotification类的特定方法,通知动作被抽象到一个接口中,任何类都可以实现它。JButton并不关心绑定的监听器是什么。事实上,按钮不关心实现类是不是被修改了。它关心的是观察者实现了这个监听器。

   下面这段摘自网上的资料,和大家分享:

    在使用观察者模式的时候,有很多的复杂问题需要注意。首先是可能出现内存泄露。监听的对象维护着一个观察者的引用。在监听对象释放这个引用之前,垃圾收集器都不能删除观察者。一定要清醒的认识到这种可能,在合适的时候删除掉观察者。另外需要注意的是观察者对象维持在一个无序的集合之中。至少当注册监听器的时候是这样。你没有必要知道先被注册的监听器是先被调用还是后被调用。如果你需要有序的调用,例如A必须先被调用然后是B。那么你必须引入一个中间层的对象来强制这种顺序。简单的按照顺序来注册监听器是不能确保调用顺序的。

   四 总结

  观察者模式是设计模式中的应用相当广泛的一种,希望本文能给大家学习观察者模式起到抛砖引玉的作用。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章