Ich entwickle eine iOS-Anwendung, wo ich einen Bildschirm habe, der einige Filter für eine verwandte Suche anzeigt. Jetzt habe ich alle diese Filter als benutzerdefinierte UIViews gemacht, weil sie alle ziemlich unterschiedliche Benutzeroberfläche haben und sie auf verschiedenen Bildschirmen wiederverwendet werden müssen. Trotz ihrer Unterschiede bieten sie alle eine gemeinsame Schnittstelle zum View-Controller, der sie verwaltet. Der View-Controller kümmert sich also nicht darum, was und wie ein FilterView etwas tut. Es geht nur darum, einige Daten an sie weiterzugeben und ihren Zustand durch eine Eigenschaft zurückzugewinnen, die allen gemeinsam ist. Sie alle haben ihre verschiedenen Klassen, die Unterklassen von FilterView einer Unterklasse von UIView sind. Diese FilterView-Klasse stellt eine Schnittstelle dar, die alle diese Unterklassen übernehmen.Unterklasse oder Protokoll, wie?
Diese Methode funktioniert gut, aber das Problem ist, dass alle Methoden und Eigenschaften, die ein filterView darstellen sollte, in der Basisklasse FilterView deklariert sind und wenn ein bestimmter Filter kein Verhalten implementiert, wird standardmäßig das von ihm bereitgestellte Verhalten verwendet Superklasse FilterView. Ich will das nicht. Ich möchte, dass jede FilterView-Unterklasse benötigt wird, um eine Implementierung in der FilterView-API bereitzustellen oder auf andere Weise ihre eigenen Standardwerte bereitzustellen, nicht die Standardwerte einer Superklasse.
Wenn ich ein Protokoll verwenden, um dieses Verhalten zu implementieren, verliere ich die Fähigkeit für alle diese Klassen obligatorisch UIViews sein, die auch eine Voraussetzung ist.
Können Sie vorschlagen, welches Entwurfsmuster ich verwenden soll, um die verschiedenen FilterView-Unterklassen besser zu verwalten?
http://stackoverflow.com/a/1034464/2518285 - "Wenn die abstrakte Klasse wirklich eine Schnittstelle ist (d. H. hat keine konkreten Methodenimplementierungen), die Verwendung eines Objective-C-Protokolls ist die geeignetere Option. " –
http://StackOverflow.com/a/11145006/2518285 –