Android Polymorphismus: Anti-Pattern?

8

Ich lese O'Reillys Buch "Programming Android", und ich versuche, den Abschnitt "Überschreibungen und Rückrufe" ab Seite 99 zu verstehen. Sie verwenden dies als Beispiel für guten Code:

%Vor%

Und später nennen wir das ein Anti-Muster wegen des Fehlens der Erweiterbarkeit Kapselung:

%Vor%

Ich sehe den funktionalen Unterschied zwischen den beiden nicht, abgesehen davon, dass der zweite viel besser lesbar ist. Beide nehmen ein TextView und implementieren eine Handler-Funktion zum Überschreiben. Wäre die zweite nicht genauso leicht mit so etwas zu erweitern?

%Vor%     
joshwoodward 05.12.2012, 14:44
quelle

2 Antworten

2
  

ein Anti-Pattern aufgrund mangelnder Erweiterbarkeit

Erweiterbar sind sie insofern ähnlich, als bei beiden Ansätzen eine Unterklasse das vorhandene TextChangeListener durch Überschreiben von handleTextChange ; aber sie unterscheiden sich darin, dass nur Ansatz Nr. 2 es auch für eine Unterklasse leicht macht, ein neues TextChangeListener hinzuzufügen, ohne das existierende (geerbte) zu ändern.

Selbst wenn die Oberklasse den Ansatz # 1 verwendet, könnte die Unterklasse immer noch einen neuen TextChangeListener hinzufügen, indem sie den Ansatz # 2 verwendet; aber wenn wir über das generelle Muster sprechen, dann wird eine konsistente Verwendung von Ansatz 2 mehr Erweiterbarkeit bieten als eine konsistente Verwendung von Ansatz # 1.

    
ruakh 05.12.2012 15:06
quelle
2

Ich würde das 2. Formular nicht mögen, da die Klasse eine Schnittstelle als Trick implementiert, nicht weil die Klasse natürlich ein Untertyp der Schnittstelle ist.

Die zweite Form kann für einfache Fälle überschaubar sein, also ist es in Ordnung, es sei denn, es wird zu unordentlich.

In Java 8 können wir die 1. Form in einer besseren Syntax verwenden:

%Vor%     
irreputable 05.12.2012 15:52
quelle

Tags und Links