Λοιπόν, η παρούσα κατάσταση:
Έχω μια κλάση, ας την πούμε Manager που περιέχει ένα collection από objects. Ο Manager έχει ένα method το οποίο κάνει ένα operation για κάθε ένα object του collection, δηλαδή δεν αλλάζει το ίδιο το object, απλά χρησιμοποιεί το state του.
Σε κάποιο σημείο του operation, τρέχει ένα function πάνω στο object το οποίο function δεν το γνωρίζει ο Manager, γνωρίζει μόνο το αντίστοιχο delegate του function που θα πρέπει να χρησιμοποιήσει. Όταν φτιάχνω τον Manager, του περνάω ως παράμετρο το function κι έτσι όλα τρέχουν μια χαρά.
Το πρόβλημα:
Παρουσιάστηκε η ανάγκη το collection να περιέχει κι ένα δεύτερο είδος από objects, για τα οποία (γιατί να είναι εύκολα τα πράγματα;) απαιτείται διαφορετικό function μέσα στο operation του Manager.
Η ερώτηση:
Ψάχνω κάποιο κατάλληλο pattern ώστε να υλοποιήσω το παραπάνω requirement. Σκέφτομαι ότι αν είχα covariance ίσως τα πράγματα να ήταν πιο απλά φτάχνοντας ένα generic τύπο και "μετακομίζοντας" το delegate μέσα στον τύπο. Φυσικά, θέλω να αποφύγω να βάλω μέσα στο operation του Manager λογική του τύπου "αν το object είναι τέτοιο, κάνε αυτό, αν είναι τέτοιο, κάνε εκείνο, κλπ" καθώς μπορεί να εμφανιστεί αύριο η ανάγκη να υποστηριχθεί κι ένα τρίτο είδος από objects. Έχει κανείς καμιά ιδέα;
Vir prudens non contra ventum mingit