2010-11-28 54 views
0

我目前有一個PipeFilterFactory可以創建PipeFilter對象。這是我如何使用工廠創建一些PipeFilter如何「訂閱」由Java中的工廠創建的對象上的事件?

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

我現在面臨的問題是,我已經PipeFilter定義的事件:

public void onOutput(int i); 

最初的想法是將有它被覆蓋PipeFilteronOutput,但有工廠創建它引發了現在我似乎無法做到這一點的問題(我想唯一的方法是在PipeFilter的構造函數中?)

如何解決這個問題?

+0

有一個抽象工廠以某種方式參與? – 2010-11-28 22:21:46

+0

沒有抽象工廠 – 2010-11-28 22:26:32

回答

0

據我所知,PipeFilter必須是抽象或接口,才能充分利用工廠設計模式。當然,這並非總是如此。

在genreal中,工廠設計模式用於處理實例化對象,例如要創建的對象的子類型,還可能涉及設置對象屬性。

在許多情況下,工廠方法與參數一起使用。您很多想要指定類型或條件,以便爲其創建類型爲PipeFilter的對象。

在這裏你的問題,你可以通過傳遞整數或條件作爲工廠方法的參數,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); 
     } 
    } 
} 
相關問題