Как настроить другой параметр в Composite Pattern? - PullRequest
0 голосов
/ 21 ноября 2011

для моей разработки я хочу использовать шаблон компонента, потому что компонент является частью другого компонента.

Но есть одна проблема. Компонентам нужны разные параметры в функции run (которая должна быть реализована).

У кого-нибудь есть идеи, как это реализовать?

Пример:

   public abstract class componsite{
       Componente(){...}
       public void run(Object object1){......}
  }
  public class firstComponent extends composite{
       ....
       public void run(Object object1){......}
       @Override
  }
  public class secondComponent extends composite{
       ....
       @Override
       public void run(Object object1,Different Object object2){......}
  }

Greetz

Ответы [ 2 ]

2 голосов
/ 21 ноября 2011

Использование Java Varargs как части интерфейса Composite

public class secondComponent extends composite{
   ....
   @Override
   public void run(Object... object){......}
}
1 голос
/ 21 ноября 2011

Рассмотрите возможность использования шаблона Visitor. Это позволяет создать элегантное строго типизированное решение, которое позволяет избежать проверки типов с использованием instanceof или даункастинга.

public interface ComponentVisitor {
  void visitFirstComponent(FirstComponent fc);

  void visitSecondComponent(SecondComponent sc);
}

public class ComponentVisitorImpl implements ComponentVisitor {
  public void visitFirstComponent(FirstComponent fc) {    
    fc.firstComponentSpecifiedMethod(a, b, c);
    // Make a call *back* to FirstComponent passing in appropriate parameters.
  }
}

Затем в каждом методе run() каждого компонента вы просто вызываете соответствующий метод посетителя, который затем выполняет обратный вызов в компонент с соответствующими параметрами; например,

public class FirstComponent extends Component {
  public void run(ComponentVisitor cv) {
    cv.visitFirstComponent(this);
  }
}

Недостатком этого подхода является то, что логике может быть трудно следовать.

...