2011-04-09 65 views
0

我知道J2ME中不支持Observer模式,因为Observer和Observable不在J2ME中。
那么,在J2ME中使用Observer模式有什么解决方法吗? 我想做一个线程做出一些逻辑,当它完成它的工作时通知主线程更新UI。J2ME中的观察者模式

回答

1

观察者/可观察模式不需要Java库中的特定类。所有这些类都是为你实现观察者模式的某些部分。你可以通过自己管理观察者来使自己的类可观察。请注意,以下内容不解释如何让一个线程等待另一个线程 - 这是一个不同的问题。

你可以写一个监听器接口是这样的:

public interface FooListener { 
    void fooChanged(int newValue); 
} 

您可以在这样一类管理一组听众:

public class Foo { 
    private int value = 0; 
    private final Collection<FooListener> listeners = new ArrayList<FooListener>(); 

    public void addFooListener(FooListener listener) { 
     listeners.add(listener); 
    } 

    public void removeFooListener(FooListener listener) { 
     listeners.remove(listener); 
    } 

    public void change(int newValue) { 
     value = newValue(); 

     for (FooListener l : listeners) { 
      l.fooChanged(newValue); 
     } 
    } 

    public int getValue() { 
     return value; 
    } 
} 

这里是一个监听器实现的一个简单的例子。

public class PrintingFooListener implements FooListener { 
    public void fooChanged(int newValue) { 
     System.out.println("New Foo value: " + newValue); 
    } 
} 

以下程序将打印New Foo value: 10

public static void main(String[] args) { 
    PrintingFooListener myListener = new PrintingFooListener(); 
    Foo myFoo = new Foo(); 
    foo.addFooListener(myListener); 
    foo.change(10); 
}