2017-02-15 2 views
-2

Ich habe 3 Algorithmen - nennen wir sie A, B, C. Jede von ihnen haben ihre eigenen Getter und Setter-Methoden, z. /setA() Gleiches gilt für B und C. Es gibt eine MainDriver Klasse, die eine Instanz von entweder A, B oder C erstellt, abhängig davon, was als Befehlszeilenargument an diese Klasse MainDriver übergeben wird. MainDriver Klasse erstellt mehrere Threads, um die Methoden des Algorithmus auszuführen, dessen Instanz erstellt wurde. Wenn diese Algorithmusinstanz erstellt wird, übergibt sie diese Instanz an eine Klasse, die die Thread-Klasse erweitert, sodass jeder einzelne Thread öffentliche Methoden dieses Algorithmus ausführen kann.

Welches Designmuster wird in diesem Multithread-Szenario verwendet?

Jetzt ist meine Frage, welches Designmuster ich verwenden sollte, um diese Architektur zu implementieren?

Wie weiß die Thread-Klasse, welche Algorithmusinstanz als Argument übergeben wird und welche Getter- und Setter-Methode entsprechend ausgeführt wird?

+0

Es wäre besser, wenn Sie Ihren Code hochladen. Die Frage basiert eher auf einer Meinung. Die Antwort auf Ihre Frage würde sich mit der Anforderung ändern. – BeginnersSake

+1

look up die Bande von vier Buch über Design-Muster – Gab

+0

@ GabrieleB-David: "Nachschlagen Bande von vier Buch" - nicht sehr hilfreich! –

Antwort

0

Zunächst können Sie eine Hierarchie für alle Ihre algirithms erstellen. z.B. BaseAlgo ist Schnittstelle und alle konkreten Algos werden das gleiche implementieren.

Ihre Thread-Unterklasse kann sich auf BaseAlgo beziehen ("hat eine Beziehung"), und Sie können Methoden auf dem konkreten Algo-Objekt aufrufen, das Sie übergeben.

0

Jede Event/Asynchron-orientierte "Architektur" würde Ihr Problem sehr leicht lösen und Ihnen ermöglichen, sich auf Ihren Geschäftscode anstatt auf den Mechaniker zu konzentrieren.

Sag mir, wenn ich falsch bin, aber wir können Ihren Vorgaben wie diese wieder aufnehmen:

  • je nach Argument, führen Sie ein spezifisches Programm
  • das ausgewählte Programm muss in einem separaten Thread ausgeführt werden

Zum Beispiel bietet Reactor (voll integriert mit der letzten Version von Spring jetzt) ​​viele Möglichkeiten, dies in einem ereignisorientierten Programmierstil zu tun.

  1. Multithreading wird bereits für Sie abgewickelt. Sie kümmern sich nur um die Konfiguration Ihrer Pools (wenn Sie ein bestimmtes Verhalten benötigen, aber Standard würde Ihren Anforderungen entsprechen)
  2. Sie entwickeln nur Ihre "Algorithmus" -Komponenten, die nichts anderes ist als eine Komponente, die einen bestimmten Code ausführt. Jede dieser Komponenten hört auf bestimmte Ereignisse, die von Ihrem Hauptprogramm ausgelöst werden. Nichts anderes.
Verwandte Themen