Ich verwende zwei Bibliotheken von Drittanbietern, um ähnliche Funktionen auszuführen. Ich muss in der Lage sein zu entscheiden, welche Bibliothek zur Laufzeit verwendet werden soll (jeder ist bei einer anderen Art von Aufgabe überlegen und ich weiß nur, welcher für eine bestimmte Aufgabe zur Laufzeit benötigt wird).Entwurfsmuster zum Zusammenführen von zwei + externen Bibliotheken
Ich versuche, eine einzelne Klasse zu erstellen, damit ich zur Laufzeit die Funktionalität einer bestimmten Bibliothek dynamisch aufrufen konnte. Anfangs dachte ich über die Verwendung des Adaptermusters nach, aber das Problem ist, dass beide Bibliotheken unterschiedliche Arten von Objekten zurückgeben und das Adaptermuster nur dann nützlich ist, wenn die Schnittstelle (oder Signatur) die gleiche ist.
Um ein spezifisches Beispiel zu geben, erlaubt das Selenium
Framework mir ein Webelement von einer Seite zu extrahieren, indem ich die Methode driver.findElement(By.Xpath("XPath"))
auf einer WebDriver
Instanz aufruft. In ähnlicher Weise ermöglicht das XSoup
Framework (eine Erweiterung von JSoup
), dass ich die gleiche Funktionalität durch Aufruf von Xsoup. compile("XPath").evaluate(doc).getElements();
ausführen kann. Die Funktionalität beider Methoden semantisch äquivalent sind - aber sie beide Rückkehr (und erwarten) zwei verschiedene Arten von Objekten (WebDriver
gibt ein WebElement
und XSoup
kehrt eine Instanz von Element
-. Zwei verschiedene Objekte Ebenso erwartet WebDriver
ein driver
Objekt und XSoup
erwartet ein document
Objekt, das als Parameter übergeben werden soll).
Mein Ziel ist es, die Funktionalität der beiden Frameworks durch den Aufruf einer einzigen Methode (wie getElement()
in diesem Fall) zusammenzuführen und die Methode mit den Details des Aufrufs der richtigen Bibliothek/Framework (basierend auf einem Parameter übergeben) die Methode für Beispiel)
Welches Entwurfsmuster könnte verwendet werden, um die Funktionalität beider Bibliotheken zur Laufzeit zusammenzuführen?
Danke
Ist es nicht genug, um einfach die Logik in einer einzigen Methode kapseln deren Signatur ist eine _Facade_ für den Zugriff auf die erforderliche Funktionalität? Client-Code, der auf diese Methode zugreift, muss dann nicht von diesen beiden Bibliotheken abhängig sein. Wenn Sie den Code, den Sie bisher hatten, gepostet haben und geklärt haben, was Ihrer Meinung nach fehlt, wäre es einfacher, die Frage zu beantworten. –