** Inhaltsverzeichnis **
Konvertieren Sie eine Schnittstelle einer Klasse in eine andere, die der Client möchte. Mit dem Adaptermuster können Sie Klassen kombinieren, die in der Benutzeroberfläche nicht miteinander kompatibel sind.
-Target Definieren Sie die Schnittstelle der Klasse nach dem Kombinieren. ・ Client-Benutzerklasse ・ Adaptee-Klasse, die Sie kombinieren möchten -Klasse erstellt durch Kombinieren der Adapter Adaptee-Klasse
Als ich den Zweck las und dachte: "Ich kann das tun", war es, als würde eine Klasse mehrere Klassen erben und verschiedene Klassen zusammenstellen. Der Beispielcode des GoF-Buches ist im Wesentlichen in C ++ geschrieben, sodass er anscheinend nicht mit Kotlin (Original Java) realisiert werden kann. Obwohl es das erste Muster ist, das sich auf die Struktur bezieht.
Nach vielen Recherchen gab es einige Seiten, die das Adaptermuster in Java realisierten (oder versuchen).
is-eine Beziehung
Oderhas-eine Beziehung
Es kann durch zwei Dinge realisiert werden. Es wurde auf jeder Seite geschrieben, aber ist es wirklich ein Adaptermuster ...? Ich denke.
Zum Beispiel sind die TextView-Klasse, die Rect-Klasse und die ColorBackground-Klasse im Standard-Toolkit enthalten, aber das jetzt zu erstellende System kann abgerundete Ecken haben. Ich erkenne, dass dieses Muster verwendet wird, wenn Sie eine Textansicht benötigen, die die Hintergrundfarbe ändern kann !!!
Wenn es mit Java realisiert werden kann, kann die folgende Klasse erstellt werden.
ColorRectTextView.java
public class ColorRectTextView extends TextView, Rect, ColorBackground {
//Methode zum Abrunden der Ecken und Ändern der Hintergrundfarbe
}
Java erlaubt jedoch keine Mehrfachvererbung. Wenn dies durch `ist-ist eine Beziehung`
und `hat-eine Beziehung`
realisiert
IsAColorRectTextView.java
public class IsAColorRectTextView extends TextView implements RectInterface, ColorBackgroundInterface {
//Implementieren Sie die von RectInterface und ColorBackgroundInterface definierten Methoden
}
Form wie
HasAColorRectTextView.java
public class HasAColorRectTextView extends TextView {
private Rect rect;
private ColorBackground colorBackGround;
public HasAColorRectTextView(Rect rect, ColorBackground colorBackGround) {
this.rect = rect;
this.colorBackGround = colorBackGround;
}
public void rectMethod() {
rect.rectMethod()
}
public void colorBackGroundMethod() {
colorBackGround.colorBackGroundMethod()
}
}
Es sieht aus wie eine bloße Vererbung und Delegation.
Recommended Posts