如何“订阅”Java中工厂创建的对象上的事件?

时间:2010-11-28 22:16:18

标签: java events

我目前有一个PipeFilterFactory来创建PipeFilter对象。这就是我使用工厂创建一些PipeFilter

的方法
    PipeFilterFactory pff = new PipeFilterFactory();
    PipeFilter pipeFilter = pff.createPipeFilter();

我面临的问题是我在PipeFilter上定义了一个事件:

public void onOutput(int i);

最初的想法是让它通过覆盖PipeFilter的{​​{1}}来运行,但让工厂创建它会引发一个问题,现在我似乎无法做到(我猜唯一的方法是在onOutput的构造函数中?)

如何解决这个问题?

2 个答案:

答案 0 :(得分: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);
        }
    }
}

答案 1 :(得分:0)

据我所知,PipeFilter必须是抽象或界面才能充分利用工厂设计模式。当然,这并非总是如此。

在genreal中,工厂设计模式用于处理实例化对象,例如要创建的对象的子类型,还可能涉及设置对象属性。

在许多情况下,工厂方法与参数一起使用。您可能希望指定要为其创建类型PipeFilter的对象的类型或条件。

在您的问题中,您可以通过将整数或条件作为工厂方法的参数createPipeFilter(int i)createPipeFilter(OutputType otype)来解决您的问题。