观察器(Observer)的用法以及其他

2008-07-01 15:53:38 来源:中国自学编程网 作者:佚名 点击:
Observable类用于跟踪那些当发生一个改变时希望收到通知的所有个体——无论“状态”是否改变。如果有人说“好了,所有人都要检查自己,并可能要进行更新



   1  Observable类用于跟踪那些当发生一个改变时希望收到通知的所有个体——无论“状态”是否改变。如果有人说“好了,所有人都要检查自己,并可能要进行更新”,那么Observable类会执行这个任务——为列表中的每个“人”都调用notifyObservers()方法。notifyObservers()方法属于基础类Observable的一部分。

    2  Observable对象会自动调用每个Observer对象的update()方法。

    3  为真正产生效果,必须从Observable继承,并在衍生类代码的某个地方调用setChanged()。这个方法需要设置“changed”(已改变)标志,它意味着当调用notifyObservers()的时候,所有观察器事实上都会收到通知。

    4  通过notifyObservers()和update()中的代码的结合,可以应付一些非常复杂的局面。


    view plaincopy to clipboardprint?
    import java.awt.*;

    import java.awt.event.*;

    import java.util.*;

 

    // You must inherit a new type of Observable:

    class BoxObservable extends Observable {

      public void notifyObservers(Object b) {

        // Otherwise it won't propagate changes:

        setChanged();

        super.notifyObservers(b);

      }

    }

 

    public class BoxObserver extends Frame {

      Observable notifier = new BoxObservable();

      public BoxObserver(int grid) {

        setTitle("Demonstrates Observer pattern");

        setLayout(new GridLayout(grid, grid));

        for(int x = 0; x < grid; x++)

          for(int y = 0; y < grid; y++)

            add(new OCBox(x, y, notifier));

      }

      public static void main(String[] args) {

        int grid = 8;

        if(args.length > 0)

          grid = Integer.parseInt(args[0]);

        Frame f = new BoxObserver(grid);

        f.setSize(500, 400);

        f.setVisible(true);

        f.addWindowListener(

          new WindowAdapter() {

            public void windowClosing(WindowEvent e) {

              System.exit(0);

      &

9 7 3 1 2 3 4 8 :



本类最新行业评测技巧教程学院
本类热点本日本周本月
本类推荐本日本周本月

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203