Załóżmy, że mam klasę Małpa, która czasami musi nabyć instancję Banana. Sposób dostarczania tego banana nie jest interesujący dla małpy, ale inicjuje pozyskiwanie banana.Wydarzenie, przekazanie lub interfejs?
Teraz mam co najmniej trzy możliwe sposoby podłączenia mojej małpy do dostawcy bananów. Jaki jest najlepszy sposób na zrobienie tego?
1. Zdarzenie
Podnieść zdarzenia Monkey.BananaNeeded
. Procedura obsługi zdarzeń ustawia właściwość BananaNeededEventArgs.Banana
.
2. Interfejs
Invoke IBananaProvider.GetBanana
. Instancja IBananaProvider
jest wstrzykiwana małpie jako argument konstruktora lub przez właściwość.
3. Delegat
Wywołuje delegata typu System.Func<Banana>
. Delegat jest wstrzykiwany małpie jako argument konstruktora lub poprzez właściwość. Ten jest kuszący, ponieważ nie wymaga deklaracji żadnych dodatkowych interfejsów lub klas, ale najwyraźniej nie jest popularnym wyborem.
+1 za zabawne przykłady i przyzwoite pytanie, ale oczywiście małpa nie dba o to, że kupuje banana, wszystko, o co troszczy się, to żarcie na smakowitą ucztę. –
Fat monkey: while (true) _provider.GetBanana.Eat(); – Guffa
Nie zapomnij wyrzucić skórek bananów. Nie chcemy przecieku skóry na ręce. –