2011-04-09 70 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); 
}