2009-02-26 6 views
2

私は自分のコードの大部分がコールバックの周りに構築されていることに気付きました。これは「設計上の欠陥」と考えられていますか?私が従うべきより良いデザインパターンがありますか?コールバックプログラミングを超える方法

答えて

3

これは悪いことではありませんが、機能しない言語で機能プログラミングを行う唯一の方法です。

7

私はobserver patternがコールバックに類似したものであると思うでしょう。あなたはそれらをチェックアウトしましたか?

Pragmatic Programmerの本には、飛行機に搭乗するのを待っている人の例が記載されています。チェックインデスクにチェックインデスクに質問してもらうのではなく、チェックインデスクは、フライトの準備ができたら興味のあるすべての人に公表します。

class Clerk implements CheckInNotifyer { 
    BunchOfObservers observers = new Bunch(); 

    public void addObserver(CheckInObserver observer) { 
    observers.add(observer); 
    } 

    private void notifyListeners() { 
    observers.all.notifyCheckIn(new CheckInEvent()); 
    } 
} 

class Passenger implements CheckInObserver { 
    public void notifyCheckIn(CheckInEvent event) { 
    event.getPlane().board(); 
    } 
} 

class WaitingArea { 
    public init() { 
    Passenger passenger = new Passenger(); 
    Clerk clerk = new Clerk(); 

    clerk.addObserver(passenger); 
    } 
} 
+0

観察者パターンをコールバックの管理構造と見なすことができるかどうかは、関心のある学生の練習問題として残しておきます。 :) – chaos

3

あなたは一度行くのコールバックを持つプロシージャの数がWaitHandlesを使用することである持っているときに特に適しています別のオプション:

この例の擬似コードは次のようになります。

1

です。 Javascriptの場合、私は実際には、複数のオブザーバーを登録して管理できるため、実際に発生したイベントを認識できるもののオブザーバーパターンを優先します。しかし、AJAX呼び出しのようなものでは、クロージャーでラップしてコールバックメソッドを組み込むのが最もクリーンなアプローチのようです。

-1

オブジェクト指向言語では、コールモビリティによって提供される機能性を達成するために、ポリモーフィズムがより洗練されたもの(キャスティングなしで面倒な関数型宣言なし)とよりオブジェクト指向のメソッド(インターフェイスから導出)

+0

もちろん、それは私がJavaでやる方法です。 – Geo

+0

-1答えは意味をなさない。コールバックは(不要な)キャストにつながりません。 –