2010-11-28 9 views
0

私は現在、PipeFilterオブジェクトを作成するPipeFilterFactoryを持っています。これは私が作成し、工場を使用していますどのようにあるいくつかのPipeFilterJavaでファクトリによって作成されたオブジェクトのイベントに「購読する」方法は?

PipeFilterFactory pff = new PipeFilterFactory(); 
    PipeFilter pipeFilter = pff.createPipeFilter(); 

私が直面しています問題は、私はPipeFilterにイベントが定義されていることである。

public void onOutput(int i); 

オリジナルのアイデアは、それを持っているだろうPipeFilteronOutputをオーバーライドして実行することができますが、工場を作成すると問題が発生します(これを行う唯一の方法はPipeFilterのコンストラクタにあると思います)

これを解決するには?

+0

何とか関与抽象工場はありますか? –

+0

アブストラクトファクトリーなし –

答えて

0

私が理解するところでは、PipeFilterは、工場設計パターンを最大限に活用するために抽象的なインターフェースでなければなりません。もちろん、これは必ずしも真実ではありません。

genrealでは、作成するサブタイプのオブジェクトなど、インスタンス生成オブジェクトを処理するための工場設計パターンが使用され、オブジェクトプロパティの設定も含まれます。

多くの場合、引数と組み合わせてファクトリメソッドが使用されます。タイプのオブジェクトを作成するタイプまたは条件を指定することが多くあります。

ここでの問題では、ファクトリメソッドの引数として整数または条件を渡すことで、createPipeFilter(int i)またはcreatePipeFilter(OutputType otype)を解決できます。

1

これはいかがですか?

class Me { 
    PipeFilterFactory pff = new PipeFilterFactory(); 

    PipeFilter pipeFilter = pff.createPipeFilter(
     new OutputEventHandler(){ 
      @Override 
      public void onOutput(int i){ 
       Me.this.tellMe(i); 
      } 
     }); 
} 

class PipeFilter { 
    private final OutputEventHandler handler; 
    //stuff 
    void onOutput(int i){ 
     if(handler!=null){ 
      handler.onOutput(i); 
     } 
    } 
} 
+0

完全な画像を作るには、コンストラクターで 'PipeFilter#handler'を設定することを忘れないでください。 –

関連する問題