2010-11-28 3 views
0

В настоящее время у меня есть PipeFilterFactory, который создает объекты PipeFilter. Это, как я использую фабрику, чтобы создать некоторые PipeFilter:Как «подписаться» на события на объекте, созданном фабрикой в ​​Java?

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

Проблема я столкнулся в том, что я определил событие на PipeFilter:

public void onOutput(int i); 

Первоначальная идея была бы иметь его быть пробежал перекрывая PipeFilter «s onOutput, но с завода создать его поднимает проблему, что теперь я не могу сделать это (я думаю, единственный способ сделать это в PipeFilter» конструктор s?)

Как это решить?

+0

Есть ли абстрактная фабрика участвует каким-то образом? –

+0

no abstract factory –

ответ

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); 
     } 
    } 
} 
+0

Для полной картины: не забудьте настроить 'PipeFilter # handler' в конструкторе. –

Смежные вопросы