Die viel elegantere Lösung wäre, die fehlende Funktionalität in eine Adapterklasse zu stecken. Anschließend würden Sie Objekte mit fehlenden Features innerhalb des Adapters umschließen und die benötigten Features dynamisch erhalten. Damit dies funktioniert, müssen die Zielklassen über eine gemeinsame Schnittstelle verfügen, und das Feld des Adapters sollte dieser Schnittstelle folgen. Dieser Ansatz ähnelt dem Decorator-Muster. Während ihre Schüler der 4. und 5. Klasse daran arbeiten, ihre Probleme zu beschreiben und zu klassifizieren, indem sie erkennen, welche eher dem Problem Jesu ähneln (die Bruchteile von Mengen multiplizieren) und die eher Demilas Asilas Problem ähneln (einen Bruchteil eines Ganzen zu finden), zirkuliert Erika Isomura durch das Klassenzimmer, hinterfragt sie und prüft ihr Verständnis. Zwei der Probleme, die sie ihren Schülern gegeben hat, haben keine visuellen Darstellungen; Sie lädt ihre Schüler ein, Zeichnungen dieser Probleme zu erstellen, wenn es für ihren Prozess hilfreich wäre. Dieses Muster fällt unter die Strukturkategorie, da Sie dieses Muster verwenden würden, um die Typen in unserer Anwendung zu strukturieren — in der Regel kann dieses Muster eine Schnittstelle in eine andere umwandeln. Die Gang of Four definiert das Adaptermuster als «Konvertieren Sie die Schnittstelle einer Klasse in eine andere Schnittstelle, die von den Clients erwartet wird. Mit Adapter können Klassen zusammenarbeiten, die aufgrund inkompatibler Schnittstellen sonst nicht funktionieren könnten.» Beachten Sie, dass beide Adapterklassen über eine gemeinsame Schnittstelle namens ITargetAdapter verfügen, die von diesen Klassen implementiert wird. Jede der beiden Adapterklassen verfügt über einen Argumentkonstruktor, der einen Verweis auf ein Objekt der jeweiligen Zielklassen akzeptiert.

Die ITargetAdapter-Schnittstelle enthält die Deklaration der Process()-Methode. Diese Methode wird sowohl von den Adapterklassen implementiert – diese Methoden rufen display() und die entsprechenden Anzeigemethoden der zuvor implementierten Zielklassen auf. Das Adaptermuster ist ein strukturelles Entwurfsmuster, das als Brücke zwischen zwei Schnittstellen fungiert, die nicht kompatibel sind. Der Begriff «Adapter» wird verwendet, um ein Objekt darzustellen, das zwei miteinander inkompatible Schnittstellen die Kommunikation und Zusammenarbeit ermöglicht. Im Wesentlichen ermöglicht das Adaptermuster Klassen (die über inkompatible Schnittstellen verfügen) die Zusammenarbeit und ihre Objekte kommunizieren bei Bedarf. Der Dienst ist eine nützliche Klasse (in der Regel Drittanbieter oder Vermächtnis). Der Client kann diese Klasse nicht direkt verwenden, da er über eine inkompatible Schnittstelle verfügt. Der Client ist eine Klasse, die die vorhandene Geschäftslogik des Programms enthält. Die Proxyklasse implementiert dieselbe Schnittstelle wie der ursprüngliche Downloader und delegiert die gesamte Arbeit. Es verfolgt jedoch die heruntergeladenen Dateien und gibt das zwischengespeicherte Ergebnis zurück, wenn die App das gleiche Video mehrmals anfordert.