我目前有一个PipeFilterFactory来创建PipeFilter对象。这就是我使用工厂创建一些PipeFilter
:
PipeFilterFactory pff = new PipeFilterFactory();
PipeFilter pipeFilter = pff.createPipeFilter();
我面临的问题是我在PipeFilter
上定义了一个事件:
public void onOutput(int i);
最初的想法是让它通过覆盖PipeFilter
的{{1}}来运行,但让工厂创建它会引发一个问题,现在我似乎无法做到(我猜唯一的方法是在onOutput
的构造函数中?)
如何解决这个问题?
答案 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)
来解决您的问题。